在检查web上的一些代码和SQL Server Management Studio生成的脚本时,我注意到一些语句以分号结束。
那么什么时候用呢?
在检查web上的一些代码和SQL Server Management Studio生成的脚本时,我注意到一些语句以分号结束。
那么什么时候用呢?
当前回答
当在包含其他语句的批处理中使用DISABLE或ENABLE TRIGGER语句时,它前面的语句必须以分号结束。否则,您将得到一个语法错误。我用这个把头发都扯掉了……后来,我偶然发现了这个MS Connect项目。它关闭了,无法修复。
在这里看到的
其他回答
你必须使用它。
The practice of using a semicolon to terminate statements is standard and in fact is a requirement in several other database platforms. SQL Server requires the semicolon only in particular cases—but in cases where a semicolon is not required, using one doesn’t cause problems. I strongly recommend that you adopt the practice of terminating all statements with a semicolon. Not only will doing this improve the readability of your code, but in some cases it can save you some grief. (When a semicolon is required and is not specified, the error message SQL Server produces is not always very clear.)
最重要的是:
SQL Server文档指出,不能用 分号是不赞成使用的特性。这意味着长期目标是强制使用 该产品的未来版本中的分号。这又多了一个进入 终止所有语句的习惯,即使目前不需要。
来源:Microsoft SQL Server 2012 T-SQL Fundamentals by Itzik Ben-Gan
举例说明为什么你总是必须使用;下面是两个查询(复制自这篇文章):
BEGIN TRY
BEGIN TRAN
SELECT 1/0 AS CauseAnException
COMMIT
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE()
THROW
END CATCH
BEGIN TRY
BEGIN TRAN
SELECT 1/0 AS CauseAnException;
COMMIT
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE();
THROW
END CATCH
摘自Ken Powers在SQLServerCentral.Com上的文章:
分号
分号字符是语句结束符。它是ANSI SQL-92标准的一部分,但从未在Transact-SQL中使用过。事实上,编写T-SQL代码好几年都不会遇到分号。
使用
有两种情况必须使用分号。第一种情况是使用公共表表达式(CTE),而CTE不是批处理中的第一个语句。第二种情况是您发出一个servicebroker语句,而servicebroker语句不是批处理中的第一个语句。
个人意见:只在需要的地方使用它们。(请参阅TheTXI的回答,以获得所需的列表。)
因为编译器不需要它们,你可以把它们放在所有地方,但是为什么呢?编译器不会告诉你在哪里忘记了一个,所以你最终会使用不一致。
[此意见是针对SQL Server的。其他数据库可能有更严格的要求。如果您正在编写运行在多个数据库上的SQL,您的需求可能会有所不同。
Tpdi上面说过,“在脚本中,当您发送多个语句时,就需要它。”这其实是不对的。你不需要他们。
PRINT 'Semicolons are optional'
PRINT 'Semicolons are optional'
PRINT 'Semicolons are optional';
PRINT 'Semicolons are optional';
输出:
Semicolons are optional
Semicolons are optional
Semicolons are optional
Semicolons are optional
当在包含其他语句的批处理中使用DISABLE或ENABLE TRIGGER语句时,它前面的语句必须以分号结束。否则,您将得到一个语法错误。我用这个把头发都扯掉了……后来,我偶然发现了这个MS Connect项目。它关闭了,无法修复。
在这里看到的
根据Transact-SQL语法约定(Transact-SQL) (MSDN)
Transact-SQL语句结束符。虽然在这个版本的SQL Server中,分号在大多数语句中都不是必需的,但在未来的版本中,分号将是必需的。
(另见@gerryLowry的评论)