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