Sql server 两者的区别是什么;并进入SQL Server中的存储过程?
Sql server 两者的区别是什么;并进入SQL Server中的存储过程?,sql-server,stored-procedures,Sql Server,Stored Procedures,之间有什么区别和GO 实际上,如果我在SQL server中有一个存储过程,并且想在其中放置t个单独的查询,第一个查询只计算记录数(count),第二个查询根据某些条件选择一些记录,那么我应该在这两个查询之间使用什么 Go或仅结束语句 GO不是一个语句,而是一个向服务器提交当前批处理到数据库的命令。它在事务内部创建一个停止 (更新,谢谢评论): 据我所知,GO是一条适用于Management studio的语句,可能也适用于其他工具。分号分隔查询,GO命令分隔批次。(GO也不是T-SQL命令,
之间有什么区别和GO
实际上,如果我在SQL server中有一个存储过程,并且想在其中放置t个单独的查询,第一个查询只计算记录数(count),第二个查询根据某些条件选择一些记录,那么我应该在这两个查询之间使用什么
Go
或代码>代码>仅结束语句
GO不是一个语句,而是一个向服务器提交当前批处理到数据库的命令。它在事务内部创建一个停止
(更新,谢谢评论):
据我所知,GO是一条适用于Management studio的语句,可能也适用于其他工具。分号分隔查询,GO命令分隔批次。(GO也不是T-SQL命令,它是sqlcmd和osql实用程序与管理工作室认可的命令。)
不能在存储过程中使用GO。如果您愿意尝试,那么过程的定义将到此结束,其余部分将是一个单独的批处理
局部变量具有批处理的作用域,因此在GO命令之后,不能使用GO命令之前声明的局部变量:
declare @test int
set @test = 42
GO
select @Test -- causes an error message as @Test is undefined
GO不是对服务器的命令,它是MS提供的大多数客户端工具的默认批处理分隔符。当客户机工具自己在新行上遇到“GO”时,它会将迄今为止积累的所有命令发送到服务器,然后重新开始
这意味着在一个批次中声明的任何变量在后续批次中都不可用。这还意味着不能在“GO”命令周围放置多行注释,因为服务器将看到第一批,并看到一条未终止的注释。它在查询分析器和
因此,发出该批中存储过程定义结束的信号。
据我所知,它不是sp的一部分。
GO不是TSQL命令
及;这句话到此结束。我知道这个帖子很老了,但我认为这些其他用法/差异对于像我这样的关于GO
的搜索可能很方便
GO
之后的任何内容都不会在存储过程中结束,因为GO
将执行CREATE/ALTER过程
命令。例如,如果您运行此
将过程X创建为
选择1作为X
去
选择2作为X
然后在运行它之后,您返回编辑过程,您会发现只有SELECT 1 As X
在其中,因为go
创建了存储过程,并且它之后的任何内容都被认为是您正在做的下一件事,而不是存储过程的一部分
我很惊讶,我还没有看到有这么多提到,但批处理分隔符不仅是特定于您正在查询的程序,而且在SSMS的情况下,它实际上是用户可编辑的!如果我进入设置并将批次分隔符从GO更改为XX,则在我的SSMS副本中,XX执行批次not GO。那么,如果我试图执行一个包含GO的存储过程,会发生什么呢
可以将GO
看作是告诉SSM将其上方的内容发送给服务器执行的一种方式。服务器永远不会收到GO
,因为它只是用来标记您希望SSMS发送给服务器的一批命令的结束。
如果您需要控制存储过程中的执行流,那么可以使用开始事务
和提交事务
来实现这一点,而这些都是存储过程中允许的。实际上,go在“management studio”之外是多余的。不过我不会(-1)。尝试通过SqlCommand执行一个包含GO
的语句,它会抛出一个异常。确切地说,它是对客户端工具(SSMS、osql、sqlcmd等)的命令,而不是对服务器的命令。在其中一些工具中,命令可以定义为其他序列。尽管如果有人这样做,我还是暗暗讨厌他们和他们创建的所有脚本-|是的,go是中间查询客户机工具的命令,用于操作它