Определение хранимой процедуры не должно заканчиваться и END
. Если вы определите свою процедуру
как это:
CREATE PROCEDURE MySP AS
SELECT field1, field2 FROM table;
GO
GRANT EXECUTE ON MySP TO user1;
... тогда SQL Server создаст процедуру, которая возвращает набор результатов, и предоставит разрешения на выполнение этой хранимой процедуры для user1
.
Если вы делаете что-то подобное, то:
CREATE PROCEDURE MySP AS
SELECT field1, field2 FROM table;
GRANT EXECUTE ON MySP TO user1;
... тогда SQL Server создаст процедуру, которая и возвращает набор результатов, и предоставляют разрешение на выполнение каждый раз, когда выполняется хранимая процедура. Другими словами, GRANT
входит в определение хранимой процедуры. Наверное, не то, что вы хотели.
Оператор GO
используется для обозначения конца пакета в SQL Server. Он однозначно говорит SQL Server: «Я закончил с тем, что выполнял в предыдущем наборе операторов». Это очень хорошая практика - добавлять это в конец каждого определения в ваших скриптах создания; эта точная ситуация укусила меня не раз в прошлом.