代码之家  ›  专栏  ›  技术社区  ›  HAdes

在SQL Server中,什么时候应该使用go,什么时候应该使用分号;?

  •  88
  • HAdes  · 技术社区  · 16 年前

    我总是搞不清什么时候应该在命令后使用go关键字,以及命令末尾是否需要分号。有什么区别?为什么/什么时候应该使用它们?

    当我在SQLServerManagementStudio中运行generate脚本时,它似乎使用go-over-the-place,但不是分号。

    5 回复  |  直到 10 年前
        1
  •  87
  •   cjk    16 年前

    GO 只与SSMS相关-它不是实际的Transact-SQL,它只是告诉SSMS在每个SSMS之间发送SQL语句 去 按顺序分批。

    这个 ; 是一个SQL语句分隔符,但在很大程度上,引擎可以解释语句的拆分位置。

    主要的例外,以及 ; 最常用的是在公共表表达式语句之前。

        2
  •  72
  •   Conrad Frix    16 年前

    在生成的DDL脚本中看到这么多go的原因是 rule 关于批次。

    创建默认值,创建函数, 创建过程,创建规则,创建 触发器,并创建视图语句 不能与其他 批处理中的语句。创造 语句必须开始批处理。所有 随后的其他声明 批将被解释为 第一个创建的定义 声明。

    生成的DDL的一个用例是在一个文件中生成多个对象。因此,DDL生成器必须能够生成批。正如其他人所说,go语句结束了批处理。

        3
  •  32
  •   Raj More    16 年前

    去

    go是一个批处理分隔符。这意味着该批中的所有内容都是该特定批的本地内容。

    变量、表变量等的任何声明都不会经过 GO 声明。

    #临时表是连接的本地表,因此它们跨越go语句。

    分号

    分号是语句终止符。这纯粹是用来标识特定语句已结束。

    在大多数情况下,语句语法本身足以确定语句的结尾。

    但是,CTE要求WITH是第一个语句,因此在WITH之前需要一个分号。

        4
  •  10
  •   onedaywhen    10 年前

    您应该使用分号来终止每个SQL语句。这是在SQL标准中定义的,

    当然,通常情况下,SQL Server允许您省略语句终止符,但为什么会养成坏习惯呢?

    正如其他人指出的,公共表表达式(CTE)前面的语句必须以分号结尾。因此,从尚未完全接受分号终结者的人们身上,我们可以看到:

    ;WITH ...
    

    我觉得这很奇怪。我想,在一个在线论坛上,当你不知道它将被粘贴到的代码的质量时,这是有意义的。

    此外,A MERGE 语句必须以分号结尾。你看到这里的图案了吗?这些是TSQL的两个更新的补充,它们密切遵循SQL标准。看起来SQL Server团队正沿着强制使用分号终结器的道路前进。

        5
  •  6
  •   SQLMenace    16 年前

    go是批处理终止符,分号是语句终止符。

    当您希望在一个脚本中有多个create proc语句时,将使用go,因为createproc必须是批处理中的第一个语句。如果使用公共表表达式,则需要用分号终止前面的语句