Ome*_*r K 6 sql t-sql sql-server stored-procedures
我们应该用GO语句结束存储过程,如果是这样,使用GO有什么好处?
CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT *
FROM AdventureWorks.Person.Address
WHERE City = @City
GO
Run Code Online (Sandbox Code Playgroud)
该声明go
,每个文档
向SQL Server实用程序发出一批Transact-SQL语句的结束信号。
...
GO
不是Transact-SQL语句;它是sqlcmd和osql实用程序以及SQL Server Management Studio代码编辑器可以识别的命令。SQL Server实用程序解释
GO
为一种信号,它们应将当前批Transact-SQL语句发送到SQL Server实例。当前这批语句由自上次GO
或自临时会话或脚本(如果是第一个)开始以来输入的所有语句组成GO
。Transact-SQL语句不能与
GO
命令占据同一行。但是,该行可以包含注释。用户必须遵循批处理规则。例如,在批处理中的第一条语句之后对存储过程的任何执行都必须包含
EXECUTE
关键字。局部(用户定义)变量的范围仅限于批处理,并且在GO
命令后无法引用 。
根据的文档create procedure
,存储过程定义带有限制。它必须是批处理中的第一个(也是唯一的)语句:
该
CREATE PROCEDURE
语句不能与其他Transact-SQL语句合并在一个批处理中。
这意味着存储过程的主体以批处理结尾。GO
在源文件中添加是一个好习惯。特别是因为通常在创建存储过程之前和之后执行操作。您会经常看到类似于以下内容的源文件:
if (object_id('dbo.foobar') is not null ) drop procedure dbo.foobar
GO
-- dbo.foobar --------------------------------------------
--
-- This stored procedure does amazing and wonderful things
----------------------------------------------------------
create procedure dbo.foobar
as
...
{a sequence of amazing and wonderful SQL statements}
...
return 0
GO
grant execute on dbo.foobar to some_schema
GO
Run Code Online (Sandbox Code Playgroud)
的值可以GO
在Sql Server Management Studio的选项中调整。如果您想使用jump
而不是go
,可以使用(记住,您几乎肯定会为此感到悲伤)。