2014-09-02 33 views
0

我得到今天釘由一個錯字,它是一個簡單的拼寫錯誤,當我定義的腳本Sql Server 2005下創建一個存儲過程,我忘了在END語句和GRANT語句之間的GO聲明,被列入這導致了GRANT聲明在存儲過程定義中並在存儲過程結束時運行(使用SQL Profiler進行驗證)。爲什麼此語句包含在存儲過程定義中?

下面是代碼:

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聲明被列入存儲過程中,我從來沒有忘記GO之前的聲明沒有看到過這個問題。

難道有人請向我解釋爲什麼會發生這種情況?

回答

1

您可以省略BEGIN/END對:定義不會在END處結束。它會一直持續到文件結尾或GO,以先到者爲準。

+0

我認爲這是答案,但有時它最好澄清。 – 2014-09-02 09:36:58

相關問題