使用另一个存储过程中的参数调用存储过程的正确语法

时间:2012-11-02 19:05:09

标签: sql-server-2008 tsql stored-procedures

我无法在存储过程中调用存储过程时建立正确的语法。我认为这种语法是正确的:

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。“

使用其他存储过程中的参数调用存储过程的正确语法是什么?

1 个答案:

答案 0 :(得分:2)

T-SQL中的GO关键字表示t-sql语句块结束并执行该块。这意味着在一个块中定义的变量对于在使用GO结束/执行该块之后发生的语句不再“在范围内”。

GO实际上不是一个transact sql语句:

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

  

用户必须遵守批次规则。例如,任何执行   批处理中的第一个语句必须包含后的存储过程   EXECUTE关键字。本地(用户定义)变量的范围是   限制为批次,并且在GO命令后无法引用