在检查web上的一些代码和SQL Server Management Studio生成的脚本时,我注意到一些语句以分号结束。
那么什么时候用呢?
在检查web上的一些代码和SQL Server Management Studio生成的脚本时,我注意到一些语句以分号结束。
那么什么时候用呢?
当前回答
如果我没有看错的话,需要使用分号来结束TSQL语句。 http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.120%29.aspx
编辑: 我找到了SSMS 2008R2的一个插件,它将格式化脚本并添加分号。我想它还在测试阶段…
http://www.tsqltidy.com/tsqltidySSMSAddin.aspx
编辑: 我发现了一个更好的免费工具/插件叫ApexSQL… http://www.apexsql.com/
其他回答
注意:这回答了书面的问题,但不是陈述的问题。把它添加到这里,因为人们会搜索它
在递归CTE语句中,分号也用在WITH之前:
;WITH Numbers AS
(
SELECT n = 1
UNION ALL
SELECT n + 1
FROM Numbers
WHERE n+1 <= 10
)
SELECT n
FROM Numbers
这个查询将生成一个名为Numbers的CTE,由整数[1..10]组成。它是通过创建一个值为1的表来完成的,然后递归直到达到10。
你必须使用它。
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
当在包含其他语句的批处理中使用DISABLE或ENABLE TRIGGER语句时,它前面的语句必须以分号结束。否则,您将得到一个语法错误。我用这个把头发都扯掉了……后来,我偶然发现了这个MS Connect项目。它关闭了,无法修复。
在这里看到的
如果我没有看错的话,需要使用分号来结束TSQL语句。 http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.120%29.aspx
编辑: 我找到了SSMS 2008R2的一个插件,它将格式化脚本并添加分号。我想它还在测试阶段…
http://www.tsqltidy.com/tsqltidySSMSAddin.aspx
编辑: 我发现了一个更好的免费工具/插件叫ApexSQL… http://www.apexsql.com/
如果你想在SQLServer中得到随机的命令超时错误,那么在CommandText字符串的末尾去掉分号。
我不知道这是否在任何地方都有记录,或者这是否是一个错误,但它确实发生了,我从痛苦的经验中学到了这一点。
我有可验证的和可重复的例子使用SQLServer 2008。
在实践中,即使你只是向数据库发送一条语句,也要包含结束符。