'GO' 可以在 SQL 中过度使用吗?
Can 'GO' be overused in SQL?
我是 SQL 的新手,想知道 GO
是否可以过度使用。 GO
是否会以任何方式影响性能或产生任何其他意想不到的后果?
不,它不能被过度使用,也没有必要。 GO
语句不是 Transact-SQL 命令,而是多个 MS 实用程序可识别的分隔符,包括 SQL Server Management Studio 代码编辑器。
GO
分隔符用于将 SQL 命令分组,并一起发送到服务器。批处理中包含的命令,即自上次 GO
命令或会话开始以来的命令集,必须在逻辑上保持一致。例如,您不能在一个批次中定义一个变量,然后在另一个批次中使用它,因为变量的范围仅限于定义它的批次。
有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/ms188037.aspx。
我想任何东西都可能被过度使用,但 go 似乎很难。 Go 只是简单地执行它前面的 t-sql ,如果你按 F5 键,不管怎样你都打算执行它。它可能会导致一些额外的工作,例如重新声明变量等等,但它基本上是无害的。
我能想到的最好的比喻是 go 就像一个逗号;这个,然后那个。过度使用逗号会使阅读你所写的内容变得混乱,过度使用 go 也会造成同样的后果。
如前所述,GO
不是语句,而是用于将脚本分成批次。每个批次都会发送到服务器并由服务器执行。
因此,是的,可能会过度使用它。如果您有多个逻辑上属于同一批的语句,并且没有技术原因将它们放在不同的批中,那么是的,如果您无论如何都将它们分开,那么您就过度使用了它。
一个简单的例子是 CREATE TABLE
后跟新创建的 table 的 INSERT INTO
。如果它们在同一个批次中,并且 CREATE TABLE
失败,则整个批次将中止,服务器甚至不会尝试插入不存在的 table。如果你用 GO
将它们分开,你不仅会得到关于错误 CREATE TABLE
的错误,你还会从 INSERT INTO
得到错误,而 table 没有'存在。或者更糟的是,该名称可能会解析为 不同 table(名称相同,架构不同),而不是您尝试插入的名称。
但也有这样的情况,语句在逻辑上属于同一个批次,但不被 SQL 服务器接受为一个批次。 IIRC,CREATE VIEW
是一个必须是批处理中第一个也是唯一一个语句的语句示例。如果你打算创建一个视图A
,和一个引用A
的视图B
,你仍然不能把它们放在同一个批次中,你需要在GO
之间他们或一些其他形式的强制单独的批次。那样的话,GO
绝对没有被过度使用。
我是 SQL 的新手,想知道 GO
是否可以过度使用。 GO
是否会以任何方式影响性能或产生任何其他意想不到的后果?
不,它不能被过度使用,也没有必要。 GO
语句不是 Transact-SQL 命令,而是多个 MS 实用程序可识别的分隔符,包括 SQL Server Management Studio 代码编辑器。
GO
分隔符用于将 SQL 命令分组,并一起发送到服务器。批处理中包含的命令,即自上次 GO
命令或会话开始以来的命令集,必须在逻辑上保持一致。例如,您不能在一个批次中定义一个变量,然后在另一个批次中使用它,因为变量的范围仅限于定义它的批次。
有关详细信息,请参阅 http://msdn.microsoft.com/en-us/library/ms188037.aspx。
我想任何东西都可能被过度使用,但 go 似乎很难。 Go 只是简单地执行它前面的 t-sql ,如果你按 F5 键,不管怎样你都打算执行它。它可能会导致一些额外的工作,例如重新声明变量等等,但它基本上是无害的。
我能想到的最好的比喻是 go 就像一个逗号;这个,然后那个。过度使用逗号会使阅读你所写的内容变得混乱,过度使用 go 也会造成同样的后果。
如前所述,GO
不是语句,而是用于将脚本分成批次。每个批次都会发送到服务器并由服务器执行。
因此,是的,可能会过度使用它。如果您有多个逻辑上属于同一批的语句,并且没有技术原因将它们放在不同的批中,那么是的,如果您无论如何都将它们分开,那么您就过度使用了它。
一个简单的例子是 CREATE TABLE
后跟新创建的 table 的 INSERT INTO
。如果它们在同一个批次中,并且 CREATE TABLE
失败,则整个批次将中止,服务器甚至不会尝试插入不存在的 table。如果你用 GO
将它们分开,你不仅会得到关于错误 CREATE TABLE
的错误,你还会从 INSERT INTO
得到错误,而 table 没有'存在。或者更糟的是,该名称可能会解析为 不同 table(名称相同,架构不同),而不是您尝试插入的名称。
但也有这样的情况,语句在逻辑上属于同一个批次,但不被 SQL 服务器接受为一个批次。 IIRC,CREATE VIEW
是一个必须是批处理中第一个也是唯一一个语句的语句示例。如果你打算创建一个视图A
,和一个引用A
的视图B
,你仍然不能把它们放在同一个批次中,你需要在GO
之间他们或一些其他形式的强制单独的批次。那样的话,GO
绝对没有被过度使用。