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

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

4

1 回答 1

2

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

GO 实际上不是一个事务处理 sql 语句:

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

用户必须遵守批量规则。例如,在批处理中的第一条语句之后执行任何存储过程都必须包含 EXECUTE 关键字。本地(用户定义)变量的范围仅限于一个批处理,并且不能在 GO 命令之后被引用

于 2012-11-02T19:10:10.127 回答