2016-10-24 6 views
0

私は次のことをしているストアドプロシージャを持っています。MS SQL - 条件付きの戻り値の返却

入力されたターゲット表のデータは、一致する(名前とアドレスのデータに基づいて)ために、いくつかの同様のソース表と照合されます。最初のテーブルで一致するものが見つかった場合は、一致したソーステーブルを特定するフラグでターゲットを更新します。しかし、一致が見つからない場合は、次のソーステーブルと次のソーステーブルを調べる必要があります。

UPDATE文で何らかの戻り値を提供する簡単な方法はありますか?それがターゲットテーブルを更新したかどうかを問い合わせることができますか?この返り値を使用して、後続のソーステーブルを不必要にチェックするのをスキップできます。

それ以外の場合、条件付きUPDATEを実行して別のクエリを実行して、UPDATEが実際にフラグを更新したかどうかを判断する必要がありますか?

+0

にあなたの結果を挿入することができます。 IDを見つけたら、テーブルを更新して何も起こりません。 – PeterRing

答えて

0

私はゴードンの魂が好きですが、実際に必要とは思わないと思います。

単に順番でアップデートを実行しますように

UPDATE BASE_TABLE 
SET FLAG='first_table' 
where FLAG IS null AND 
EXIST (SELECT 1 FROM first_table f1 where f1.ID = ID) 

UPDATE BASE_TABLE 
SET FLAG='second_table' 
where FLAG IS null AND 
EXIST (SELECT 1 FROM second_table f2 where f2.ID = ID) 

... とします。 条件付きですべての行をチェックする必要はありません。非常に遅いです。

+0

こんにちはPeter、私はあなたの最初の返信であなたが何を意味したのか分かりませんでしたが、私はすぐにフィールドに値があるかどうかを確認することができました。ありがとう。 – user3411176

+0

Peter、上記のような一連の更新コマンドが数十件あり、リソースがかなり集まっていました。最初の更新で一致するものが見つかった場合は、フィールドを確認するための後続の照会を行わずに他の更新をスキップする方法がありますか? – user3411176

+0

FLAGがヌルであるため、更新は既に更新された行をスキップします。あなたはそれらを確認する必要はありません。あなたがする必要があるのは、それらをコミットすることだけです。だから基本的に:BEGIN TRAN;更新; COMMIT TRAN – PeterRing

2

恐らく最も安全な方法はOUTPUT clauseです。これにより、変更された行が新しい表に戻されます。

テーブルを確認して、更新された行があるかどうかを確認できます。

OUTPUT節の利点の1つは、複数の行を同時に更新できることです。

+0

私にそれを一瞬で打つ! –

+0

Crikey!信じられないほど速やかな対応に感謝します。私はあなたが提供したリンクから読み上げます。 – user3411176

0

あなたはのtry/catchであなたの更新を入れて、あなたは単に別の後にアップデートを実行し、任意の条件を必要といけない別のテーブル