我一直很困惑应该在命令后面使用GO关键字,并且是否需要在命令结尾加分号。它们之间的区别是什么,为什么/何时应该使用它们?
当我在SQL Server Management Studio中运行Generate-script时,似乎到处都在使用GO,但没有使用分号。
我一直很困惑应该在命令后面使用GO关键字,并且是否需要在命令结尾加分号。它们之间的区别是什么,为什么/何时应该使用它们?
当我在SQL Server Management Studio中运行Generate-script时,似乎到处都在使用GO,但没有使用分号。
GO
只与 SSMS 相关 - 它并不是实际的 Transact SQL,而是告诉 SSMS 按顺序将每个 GO
之间的 SQL 语句发送到单独的批处理中。
;
是 SQL 语句分隔符,但大多数情况下,引擎可以解释您的语句在哪里断开。
主要的例外和使用 ;
最频繁的地方是在公共表达式语句之前。
GO
不是 T-SQL 部分,而;
是。 - msarchetMERGE
语句必须以分号结尾。 - onedaywhen;
已经过时,而是不使用它已经过时了,也就是说,根据来源,使用;
将变得强制性。 - cjkGO是批处理分隔符。这意味着该批处理中的所有内容都局限于该特定批处理中。
任何变量、表变量等声明不会越过 GO
语句。
#Temp表对连接局部有效,因此它们跨越GO语句。
分号是语句终止符。这仅用于标识特定语句已结束。
在大多数情况下,语句语法本身足以确定语句的结尾。
然而,CTE要求WITH是第一条语句,因此需要在WITH之前使用分号。
MERGE
语句必须以分号结束。 - onedaywhen在每个SQL语句的末尾使用分号作为终止符是应该的,这在SQL标准中有定义。
当然,SQL Server通常允许您省略语句终止符,但为什么要养成坏习惯呢?
正如其他人所指出的那样,公共表达式(CTE)前面的语句必须以分号结束。因此,由于一些人没有完全接受分号终止符,我们会看到这样的写法:
;WITH ...
我认为它看起来非常奇怪。我想在在线论坛中,当您无法确定将粘贴到其中的代码的质量时,这是有意义的。
另外,MERGE
语句必须以分号结束。你看到规律了吗?这些是最新添加到TSQL中的一些功能,紧密遵循SQL标准。看起来SQL Server团队正在要求使用分号终止符。
GO是批处理终止符,分号是语句终止符。
当您想在一个脚本中使用多个create proc语句时,需要使用GO,因为create proc必须是批处理中的第一条语句。如果使用公共表达式,则其前面的语句需要用分号终止。
MERGE
语句必须以分号结尾。 - onedaywhen