id と created_in_variant の 2 つの列 (特に) を持つテーブルと、id に基づいて created_in_variant 値を計算するストアド プロシージャがあります。私はこのようなことをしたいと思います:
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
それを行う良い方法はありますか?
id と created_in_variant の 2 つの列 (特に) を持つテーブルと、id に基づいて created_in_variant 値を計算するストアド プロシージャがあります。私はこのようなことをしたいと思います:
UPDATE [dbo].[alerts]
SET [created_in_variant] = find_root [id]
それを行う良い方法はありますか?
procをUDFに変更すると、基本的には取得したとおりに正確に呼び出すことができます
UPDATE [dbo].[alerts]
SET [created_in_variant] = dbo.find_root([id])
要求した内容を実装するためにストアド プロシージャを使用する必要がある場合は、見つかったルート値を変数に保存して渡すことができます。他の人が言及したように UDF (ユーザー定義関数) を使用しない限り、より簡単な方法はありません。
これは、ストアド プロシージャをステートメントに直接渡すことができないため、ストアド プロシージャを使用する場合の最も簡単な答えの 1 つです。UPDATE
C# や Java などの他の言語のような補間はありません。
declare @root int
-- 1) Return the root through output parameter
exec find_root @id, @root out
-- or make the sproc to return the root value
exec @root = find_root @id
UPDATE [dbo].[alerts]
SET [created_in_variant] = @root
あなたは単にdboを見逃しています.DJの答えはすでに良いはずです. 今日もまったく同じ問題がありました。
ストアド プロシージャをスカラー値関数として書き直します。その後、これを更新に使用できます。
created_in_variant を計算フィールドにすることはできますか?
ストアド プロシージャの代わりに UDF を使用できます。
私はそうは思わない。ストアド プロシージャを機能するスケーラー関数に変更した場合。
ストアド プロシージャを使用する場合は、(カーソル内の) ID ごとにストアド プロシージャを呼び出し、OUTPUT 変数で値を返し、出力変数を使用して ID ごとに更新を行う必要があります。ただし、UDF を使用する方がはるかに優れています。
ストアド プロシージャをユーザー定義関数に再プログラムし、それを使用することができます。