在一个典型的数据库中,我们在一个视图、SQL语句或存储过程中有多行或多页SQL语句。此外,多个开发人员改变了T-SQL,因此很难跟踪谁改变了代码以及出于何种原因。
语句中的SQL注释可以帮助你轻松阅读和维护SQL脚本。例如,你可以放一个注释,展示语句的目的,如添加一个特定的查询提示或修改脚本逻辑。SQL Server不执行这些注释,它也不影响查询行为。
SQL注释的另一个目的是禁止执行一个特定的代码。例如,假设你不想执行一个select语句中的where块条件。因此,在where块上放一个注释,SQL Server会跳过执行。
你可以在语句的开头或结尾的关键词、参数之间添加注释。SQL注释可以以下列格式添加。
单行注释
单行SQL注释在SQL Server中使用两个破折号(-)。一旦你添加了这两个破折号,SQL Server就会忽略单行中这些破折号之后写的文本。这就是所谓的注释了。在你对一段代码进行注释后,你还可以在SQL Server管理工作室(SSMS)中看到不同的颜色。
例如,在这里,我们在脚本中添加一个注释,以突出查询的目的。
--SSMS 中 的 选择 顶部 'N' 行 命令 的脚本 选择 顶部 (1000) [id] ,[Auditdata] FROM [azuredemodatabase].[dbo].[AuditLogs]. |
另一个例子显示我用双破折号注释了一行代码。SSMS IDE将文本颜色改为绿色,SQL Server跳过执行这段代码。

在下面的例子中,我们在选择语句中注释了列[BillingAmt]。因此,你在查询输出中没有看到它。

SQL Server Management Studio有一个图标,可以为注释单行字符添加双破折号。
选择该行并点击SSMS中的高亮图标。它将在该行的前面加上双破折号。
如果你选择多行并点击注解图标,它会在每行添加双破折号,如下图所示。
你也可以使用快捷键CTRL+K CTRL+C来快速放出注释。同样,你可以点击突出显示的图标来删除单行注释。其快捷键是CTRL+K CTRL+U。
区块或多行SQL注释
如果我们使用双破折号/(-)进行注释,SQL Server认为它是一个单行。如果我们需要注释多行,你需要在每一行上放一个双破折号。

如果我们想注释多行代码,这并不是一个可行的方案。因此,SQL Server使用多行注释,以/*开始,以*/结束。SQL Server会忽略写在这些注释里面的文本和代码。

你也可以使用这些多行注释来显示关于脚本的有用信息。例如,下面的脚本在存储过程脚本中添加了对象信息、脚本日期、作者、描述。
如果以后有任何开发人员编写存储过程的脚本,他可以看到关于谁和什么被修改的简要信息。
嵌套的SQL注释
在SQL Server中,我们可以有嵌套的注释。例如,如果你在现有的注释中指定了开放块(/*),SQL Server会把它当作一个嵌套注释。因此,嵌套的注释应该有一个相应的block closed(/*)注释标记。如果你没有指定一个嵌套的注释块关闭标记,你会得到一个错误信息。
嵌套注释的例子。
DECLARE @Text AS VARCHAR(20); GO /* --外层块打开 SELECT @comment = '/*'; --嵌套块已打开 */ --嵌套区块关闭 */--外层区块关闭 select @@version; GO |
输出。

如果嵌套注释没有关闭块标记(*/),你会得到以下错误信息。

SQL Server使用Go 语句来分隔脚本中的多个批次。然而,你不能在嵌套的多行注释中使用go语句,因为SQL Server会读取一行中的go字符,并认为它是对批次的分离。因此,如果你试图使用它,你会得到以下语法错误。

避免使用双破折号的SQL注释
如前所述,我们可以在SQL脚本中使用双破折号(-)和斜线开头(/* ...*/)添加注释。但是,你应该避免使用双破折号(-)的注释。
例如,假设我们在下面的SQL脚本中添加一个注释。

有时,少数监控工具或诊断管理视图将整个脚本放在一个长行中。如果我们把SQL脚本转换为一行,它就会变得无效,因为SQL Server会忽略所有写在双破折号之后的文本、代码。
然而,如果你使用斜线星来做注释,就不会出现这个问题,如下图所示。
ApexSQL Refactor(SQL格式)用于SQL注释
ApexSQL Refractor工具有助于根据用户的要求来格式化SQL脚本。例如,如果我们不想要单行注释(双破折号)并将其转换为块状注释,ApexSQL Refractor可以帮助你。
你可以下载ApexSQL Refractor作为SSMS插件。现在,打开SSMS并导航到ApexSQL > ApexSQL Refractor > 选项。在注释部分,你可以看到以下默认配置。
假设我们有一个SQL脚本,包括以下双破折号的单行注释。

在ApexSQL Refractor的属性中,你可以看到右侧的脚本预览与现有配置。
创建一个新的ApexSQL配置文件,并在以下配置上打勾。
- 使用*在块注释上方添加边框
- 在块状注释下面添加边框,使用*。
- 将所有评论改为块状评论
- 执行
你可以看到,它把所有的评论都转换为块状评论,并在上面和下面使用Asterix(*)放置一个边框。
总结
这篇文章探讨了SQL注释和它们的类型,以便在脚本中提供有用的信息。这些注释有利于避免执行SQL脚本的特定部分而不是删除它。你可以使用ApexSQL Refractor工具来转换块注释中的所有注释,过程很简单。
你好!我是Rajendra Gupta,数据库专家和架构师,帮助企业快速有效地实施Microsoft SQL Server、Azure、Couchbase、AWS解决方案,修复相关问题,以及性能调试,拥有超过14年的经验。
我是《DP-300 Administering Relational Database on Microsoft Azure》一书的作者。我在MSSQLTips、SQLShack、Quest、CodingSight和SeveralNines上发表了650多篇技术文章。
我是最大的关于单一主题的免费在线文章集之一的创建者,他的50篇关于SQL ServerAlways On Availability Groups的系列文章。
基于我对SQL Server社区的贡献,我在2019年、2020年和2021年连续被评为SQLShack著名的年度最佳作者(排名第二),并在2020年获得MSSQLTIPS的冠军奖。
个人博客:
www.dbblogger.comI,我一直对新的挑战感兴趣,所以如果你需要咨询帮助,请联系我[:rajendra.gupta16@gmail.com](mailto:rajendra.gupta16@gmail.com)








