1

id と created_in_variant の 2 つの列 (特に) を持つテーブルと、id に基づいて created_in_variant 値を計算するストアド プロシージャがあります。私はこのようなことをしたいと思います:

UPDATE [dbo].[alerts]
     SET [created_in_variant] = find_root [id]

それを行う良い方法はありますか?

4

9 に答える 9

3

このタイプの問題では、ストアド プロシージャの代わりにスカラー値関数(ユーザー定義関数とも呼ばれます)を使用することを検討することをお勧めします。

編集:ここにSVFに関するいくつかの情報があります:クリック

EDIT 2:15からの詳細情報は次のとおりです

于 2009-04-09T15:26:53.797 に答える
2

procをUDFに変更すると、基本的には取得したとおりに正確に呼び出すことができます

UPDATE [dbo].[alerts]
     SET [created_in_variant] = dbo.find_root([id])
于 2009-04-09T15:28:19.473 に答える
1

要求した内容を実装するためにストアド プロシージャを使用する必要がある場合は、見つかったルート値を変数に保存して渡すことができます。他の人が言及したように UDF (ユーザー定義関数) を使用しない限り、より簡単な方法はありません。

これは、ストアド プロシージャをステートメントに直接渡すことができないため、ストアド プロシージャを使用する場合の最も簡単な答えの 1 つです。UPDATEC# や 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
于 2009-04-09T17:54:55.783 に答える
0

あなたは単にdboを見逃しています.DJの答えはすでに良いはずです. 今日もまったく同じ問題がありました。

于 2010-10-26T16:51:59.210 に答える
0

ストアド プロシージャをスカラー値関数として書き直します。その後、これを更新に使用できます。

于 2009-04-09T15:26:10.633 に答える
0

created_in_variant を計算フィールドにすることはできますか?

于 2009-04-09T15:26:35.780 に答える
0

ストアド プロシージャの代わりに UDF を使用できます。

于 2009-04-09T15:26:58.010 に答える
0

私はそうは思わない。ストアド プロシージャを機能するスケーラー関数に変更した場合。

ストアド プロシージャを使用する場合は、(カーソル内の) ID ごとにストアド プロシージャを呼び出し、OUTPUT 変数で値を返し、出力変数を使用して ID ごとに更新を行う必要があります。ただし、UDF を使用する方がはるかに優れています。

于 2009-04-09T15:27:07.230 に答える
0

ストアド プロシージャをユーザー定義関数に再プログラムし、それを使用することができます。

于 2009-04-09T15:27:24.403 に答える