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ステートメントのブロックが終了し、そのブロックを実行することを示しています。これは、1つのブロックで定義された変数が、そのブロックがで終了/実行された後に発生するステートメントの「スコープ内」ではなくなったことを意味しますGO

GOは実際にはtransactsqlステートメントではありません。

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

ユーザーはバッチのルールに従う必要があります。たとえば、バッチの最初のステートメントの後にストアドプロシージャを実行するには、EXECUTEキーワードを含める必要があります。ローカル(ユーザー定義)変数のスコープはバッチに制限されており、GOコマンドの後で参照することはできません

于 2012-11-02T19:10:10.127 に答える