odi*_*seh 16 sql-server stored-procedures
SQL Server中;
和GO
存储过程之间有什么区别?
实际上,如果我在SQL服务器中有一个存储过程,并且想要在其中放置单独的查询,其中第一个只计算记录数(计数)而第二个根据某些条件选择一些记录,那么我应该在那两个问题?
Go
要么 ;
Far*_*ruz 23
;
刚刚结束声明.
GO不是语句,而是服务器将当前批处理提交到数据库的命令.它在事务中创建一个停止.
http://msdn.microsoft.com/en-us/library/ms188037.aspx
(更新,感谢评论):
就我所知,GO是一份针对管理工作室的声明,也许也适用于其他工具.
Guf*_*ffa 13
分号分隔查询,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
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道这个线程很旧,但我认为这些其他用途/差异对于像我这样的其他关于GO
.
之后的任何内容GO
都不会在您的 sproc 中结束,因为GO
将执行CREATE/ALTER PROCEDURE
命令。例如,如果您运行此...
CREATE PROCEDURE X AS SELECT 1 As X GO SELECT 2 As X
然后在运行它之后,您返回编辑程序,您会发现只有sprocSELECT 1 As X
在那里,因为GO
创建了 sproc 以及它之后的任何内容都被假定为您正在做的下一件事情,而不是 sproc 的一部分。
可以将其GO
视为告诉 SSMS 将其上方的任何内容发送到服务器以供执行的一种方式。服务器永远不会收到 ,GO
因为它只是在那里标记您希望 SSMS 发送到服务器的一批命令的结束。如果您有一个需要控制存储过程中的执行流的场景,那么您可以使用BEGIN TRANSACTION
和COMMIT TRANSACTION
,并且这些在存储过程中是允许的。
归档时间: |
|
查看次数: |
17580 次 |
最近记录: |