Answers:
GO
仅与SSMS相关-不是实际的Transact SQL,它只是告诉SSMS在每个之间发送SQL语句 GO
按顺序在每个批次依次。
的 ;
是一个SQL语句分隔符,但在大多数情况下,发动机可以解释其中的语句被打破了。
主要例外以及;
最常使用的地方是在通用表表达式语句之前。
GO
不是T-SQL语句组成部分,同时;
是
MERGE
语句必须由一个分号终止。
;
已弃用,不使用它不被弃用,即根据来源,它将变为强制性的。
在生成的DDL脚本中看到这么多GO的原因是由于以下有关批处理的规则。
CREATE DEFAULT,CREATE FUNCTION,CREATE PROCEDURE,CREATE RULE,CREATE TRIGGER和CREATE VIEW语句不能与其他语句批量组合使用。CREATE语句必须开始批处理。该批处理中的所有其他其他语句将被解释为第一个CREATE语句的定义的一部分。
生成的DDL的用例之一是在单个文件中生成多个对象。因此,DDL生成器必须能够生成批处理。正如其他人所说的,GO语句结束了该批处理。
Go是一个批处理分隔符。这意味着该批次中的所有内容都位于该特定批次的本地。
变量,表变量等的任何声明都不会跨GO
语句。
#Temp表在连接本地,因此它们跨GO语句。
分号是语句终止符。这纯粹是用来标识特定的语句已结束。
在大多数情况下,语句语法本身足以确定语句的结尾。
但是CTE要求WITH是第一个语句,因此在WITH之前需要用分号。
MERGE
语句必须由一个分号终止。
您应该使用分号终止每个SQL语句。这是在SQL标准中定义的,
当然,SQL Server通常会允许您省略语句终止符,但是为什么要养成不良习惯呢?
正如其他人指出的那样,公共表表达式(CTE)之前的语句必须以分号终止。结果,从尚未完全接受分号终止符的人们中,我们看到了这一点:
;WITH ...
我认为看起来真的很奇怪。我想当您无法确定将要粘贴到的代码的质量时,在在线论坛中这是有意义的。
此外,MERGE
语句必须以分号终止。在这里看到图案吗?这些是对TSQL的一些较新的补充,它们严格遵循SQL标准。看起来SQL Server团队正在强制使用分号终止符。