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是中间查询客户机工具的命令,用于操作它