为什么此语句包含在存储过程定义中?

时间:2014-09-02 09:19:12

标签: sql sql-server tsql stored-procedures

我今天被一个错字钉了,当我在Sql Server 2005下定义一个脚本来创建一个存储过程时,这是一个简单的拼写错误,我忘记了GO语句之间的END语句和GRANT语句,这导致GRANT语句包含在存储过程定义中并在存储过程结束时运行(使用SQL事件探查器验证)。

以下是代码:

USE [TestGround]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[FooProc]
AS 
    BEGIN

    SELECT * FROM dbo.Foo
    END

-- a GO statement is missing here..   
GRANT EXECUTE ON [dbo].[Foo] TO dbo

我理解GO表示批处理已结束,但我很惊讶地发现GRANT语句已包含在存储过程中,我从未忘记{{1}之前没有见过这个问题的陈述。

有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您可以省略BEGIN / END对:定义不会在END结束。它会持续到文件末尾或GO,以先到者为准。