我总是对在命令后应该使用GO关键字以及命令末尾是否需要分号时感到困惑.有什么区别以及为什么/何时应该使用它们?
当我在SQL Server Management Studio中运行Generate-script时,它似乎在整个地方使用GO,但不是分号.
cjk*_*cjk 89
GO仅与SSMS有关 - 它不是实际的Transact SQL,它只是告诉SSMS GO按顺序在各个批次之间发送SQL语句.
它;是一个SQL语句分隔符,但在大多数情况下,引擎可以解释语句的分解位置.
主要例外以及;最常使用的位置是在公用表表达式声明之前.
Raj*_*ore 33
Go是批处理分隔符.这意味着该批次中的所有内容都是该特定批次的本地内容.
变量,表变量等的任何声明都不会跨越GO语句.
#Temp表是连接的本地表,因此它们跨越GO语句.
分号是语句终止符.这纯粹用于标识特定语句已结束.
在大多数情况下,语句语法本身足以确定语句的结束.
然而,CTE要求WITH是第一个语句,因此在WITH之前需要一个分号.
one*_*hen 11
您应该使用分号来终止每个SQL语句.这在SQL标准中定义,
当然,SQL Server通常允许您省略语句终止符,但为什么会陷入坏习惯?
正如其他人所指出的那样,公共表表达式(CTE)之前的语句必须以分号结束.因此,对于尚未完全接受半结肠终结者的人,我们看到:
;WITH ...
Run Code Online (Sandbox Code Playgroud)
我认为这看起来很奇怪.我想在一个在线论坛上,当你无法分辨它将被粘贴的代码质量时,它是有道理的.
此外,MERGE语句必须以分号结束.你在这看到一个模式吗?这些是TSQL的一些新增功能,它们严格遵循SQL标准.看起来SQL Server团队正在努力使用分号终止符.
GO是批量终止符,分号是语句终止符.
当你想在一个脚本中有多个create proc语句时,你将使用GO,因为create proc必须是批处理中的第一个语句.如果使用公用表表达式,那么之前的语句需要用分号终止
| 归档时间: |
|
| 查看次数: |
60565 次 |
| 最近记录: |