2012-11-02 2 views
3

У меня возникли трудности с установкой правильного синтаксиса для вызова хранимой процедуры в хранимой процедуре. Я думал, что этот синтаксис был правильным:Исправить синтаксис для вызова хранимой процедуры с параметрами из другой хранимой процедуры

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[newProc](
    @param1 varchar(50), 
    @param2 nvarchar(2000), 
    @param3 int, 
    @param4 int, 
    @param5 int, 
    @param6 int 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    EXEC [dbo].[externProc1] @param1, @param2; 
    GO 

    EXEC [dbo].[externProc2] @param3, @param4; 
    GO 

    EXEC [dbo].[insertProc3] @param5, @param6; 
    GO 

END 
GO 

Но когда я пытаюсь это, я получаю «Неправильный синтаксис около„;“ Должен объявить скалярную переменную @ param3. Должен объявить скалярную переменную @ param5. "

Каков правильный синтаксис для вызова хранимой процедуры с параметрами из другой хранимой процедуры?

ответ

2

Ключевое слово GO в T-SQL утверждает, что блок операторов t-sql заканчивается и выполняет этот блок. Это означает, что переменная, определенная в одном блоке, больше не «в области видимости» для оператора, возникшего после того, как этот блок был завершен/выполнен с использованием GO.

GO не фактически Transact SQL заявление:

http://msdn.microsoft.com/en-us/library/ms188037(v=sql.105).aspx

Пользователи должны следовать правилам для партий. Например, любое выполнение хранимой процедуры после первого оператора в пакете должно содержать ключевое слово EXECUTE. Объем локальных (определяемых пользователем) переменных составляет , ограниченный пакетом, и не может быть указан после команды GO.

+0

Ах, да, я исправил это. Вы получите чек после истечения срока. Если в конце есть только один GO, будут ли выполняться предыдущие операции синхронно? И.Е. есть ли причина не просто использовать один GO в конце? – Christian

+0

Я уверен, что единственный GO в конце не нужен, особенно при исполнении из студии управления. – davek

+0

GO не является периодом инструкций T-SQL, он просто помощник для инструментов MS Analyzer/Management Studio, поэтому вы НЕ МОЖЕТЕ использовать его в хранимой процедуре – BlackTigerX

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