2010-02-22 116 views
10

SQL Server中的存储过程中的;GO有什么区别?有什么区别;并在存储过程中在SQL Server中?

实际上,如果我在SQL服务器中有一个存储过程,并想在它内部放置单独的查询,第一个只计算记录数(count),第二个根据某些条件选择一些记录,那么是什么我应该在两个查询之间使用吗?

Go;

回答

18

;只是结束声明。

GO不是一条语句,而是一条命令到服务器将当前批次提交到数据库。它在交易中创建一个止损点。

http://msdn.microsoft.com/en-us/library/ms188037.aspx

(更新,感谢您的意见): GO是用于管理工作室,据我知道,也许其他工具以及

+3

其实,在“管理工作室”之外去冗余。我不会(-1)。 – 2010-02-22 11:16:37

+0

@Hassan Syed:是的,你是对的 – Faruz 2010-02-22 11:17:50

+0

尝试通过SqlCommand执行一个带有'GO'的语句,它会抛出一个异常。 – cjk 2010-02-22 11:20:15

11

分号分隔查询,该声明GO命令分离批次。 (GO也不是T-SQL命令,它是由sqlcmd和osql实用程序和Management Studio识别的命令。)

您不能在存储过程中使用GO。如果你想尝试,程序的定义将在那里结束,其余的将是一个单独的批次。

局部变量有该批次的范围,所以GO命令后,您不能使用GO命令之前声明的局部变量:

declare @test int 

set @test = 42 

GO 

select @Test -- causes an error message as @Test is undefined 
4

GO是不是服务器的命令时,它的MS提供的大多数客户端工具的默认批量分隔符。当客户端工具本身在新行上遇到“GO”时,它会将迄今积累的所有命令发送到服务器,然后重新开始。

这意味着在一批中声明的任何变量在后续批次中都不可用。而且这也意味着多行注释不能放在“GO”命令周围 - 因为服务器会看到第一批,并看到一条未终止的评论。

2

它标记查询分析器中批处理的结束,因此表示该批处理中存储过程定义的结束。 尽管我知道它不是sp的一部分。 GO不是TSQL命令。

而且;只是结束声明。

相关问题