0

通常は正常に動作する SQL Server ストアド プロシージャがあります。ただし、ストアド プロシージャをウォークスルーするときの 1 つのレコードについては、行を実行せずに「スキップ」しています。

if not exists ( select * ... ) begin
    exec @Result = InsertRecord_A @AccountNo, @ID, @EventID;
    if @Result <> 0 return @Result;

    -- Do something else
    insert into ...
    select ...
end

この場合、その行exec @Result...はスキップされます。通常は手順を開始しますInsertRecord_Aが、このレコードで実行することはできません。

何か案は?

更新: 次のエラー メッセージがあります。

Msg 201, Level 16, State 4, Procedure InsertRecord_A, Line 0
Procedure or function 'InsertRecord_A' expects parameter '@EventID', which was not supplied.

エラー メッセージの奇妙な点は、@EventID の値が 460 であることを示すことです。これは正しい値です。

4

2 に答える 2

3

パラメータを序数の位置で渡し、正しい順序になっていることを期待するのではなく、パラメータを明示的に正しい値に設定してみてください。

exec @Result = InsertRecord_A @AccountNo = @AccountNo, @ID = @ID, @EventID = @EventID;

もちろん、これは、InsertRecord_Aプロシージャが変数と同じ名前の 3 つのプロシージャを取ることを前提としています。

これについてよくわからない場合はexec sp_help InsertRecord_A、テーブルを実行または参照して、sys.parametersそれらが何と呼ばれているかを確認できます。

于 2012-11-28T15:35:47.690 に答える
1

@SchmitzITは、エラーコードではなく、プロシージャInsertRecord_Aの実際のSQLコード(CREATE PROCEDUREなど)を要求していたと思います。推測:あなたが得ているエラーは、私が過去にプロシージャ定義のパラメータの数を誤って変更したときに発生したエラーです。procが次のように変更された場合:

CREATE PROCEDURE InsertREcord_A @ExtraParameter int, @AccountNo int,@ID int,@EventID int

次に、位置4で@EventIDパラメーターを探します。位置3で@EventIDという有効なパラメーターを渡しているという事実は、役に立ちません。この状況では、位置3で渡されたパラメーターと、位置4で期待されるパラメーターの両方が@EventIDと呼ばれるという事実は、混乱を招きます。

(これが、プロシージャ定義で常にパラメータの前にpを付ける理由です)

于 2012-11-28T15:38:49.550 に答える