我今天被一个错字钉了,当我在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}之前没有见过这个问题的陈述。
有人可以向我解释为什么会这样吗?
答案 0 :(得分:1)
您可以省略BEGIN
/ END
对:定义不会在END结束。它会持续到文件末尾或GO
,以先到者为准。