2014-09-02 3 views
0

я получил прибил сегодня опечаткой, его простую ошибку, когда я определил сценарий, чтобы создать хранимую процедуру под Sql Server 2005, я забыл GO заявление в между END заявлением и GRANT заявлением, это приведет к 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

Я думал, что это был ответ, но иногда его просто лучше всего прояснить. –

Смежные вопросы