1

は、ここで私がやろうとしているものです:INSERTステートメント内でストアドプロシージャを呼び出すことはできますか?一言で言えば

CREATE PROCEDURE sp_insertingStuff 
    @value1 
AS 
    INSERT INTO [my_table] (column1, column2) 
    VALUES (@value1, execute sp_anotherSP) 
GO 

私が知っている必要がありますどのようなものです:それはそのようなINSERTステートメント内からストアドプロシージャを実行することは可能でしょうか?これを行うより良い方法があれば、私はアドバイスを受けています。このようなことをする必要があるのは、その2番目の列の値を取得するためにIF文を実行する必要があるからです。

+2

おそらくストアドプロシージャは必要ありません。あなたが望む仕事をしてください。あなたの実際の問題が本当に何であるかについて私たちにいくつかの詳細を教えない限り、これについてあなたを助けることはできません。 –

+0

これらの "IF文"を代わりに 'CASE' *の式*で置き換えることが可能なのでしょうか? –

+1

システムが使用する接頭辞であるストアドプロシージャsp_の名前を決して使用しないでください。 – HLGEM

答えて

3

は次のようにちょうど最初のsp 内部のINSERT文上述した第2のいずれかを実行しますでOUTPUTパラメータを追加します。

CREATE PROCEDURE sp_insertingStuff 
    @value1 
AS 
    declare @value2 int 
    exec @value2 = sp_anotherSP 

    INSERT [my_table] (
     column1, 
     column2 
    ) 

    VALUES (
     @value1, 
     @value2 
    ) 
GO 
ソリューション述べ
+0

私はいくつかの他の回答を見ていきますが、これは必要な結果を達成しました。ありがとうございます。 –

1

VALUES部分でspを実行することはできません。このように、挿入する前に戻り値と出力値を実行して取得する必要があります。

CREATE PROCEDURE sp_insertingStuff 
    @value1 
AS 

    DECLARE @anotherValue INT 
    execute @anotherValue = sp_anotherSP 

    INSERT [my_table] (
     column1, 
     column2 
    ) 

    VALUES (
     @value1, 
     @anotherValue 
    ) 
0

ワンOUTPUTパラメータを追加することです。もう1つは、ストアド・プロシージャがデータをまだUPDATE/INSERT/DELETEしていない限り、ストアド・プロシージャを関数として書き換えることです。

0

はいこれは、インサートspでtempテーブルを作成することによって実行できます。 呼び出したいspを呼び出して、tempテーブルに値を格納してから、そのtempテーブルの値をspで使用して、その一時テーブルを最後に削除してください。

関連する問題