いくつかの基準に基づいてテーブルを更新しています。その基準に対応する行がある場合にのみテーブルを更新する必要があります。ここに私のコードの例です:のみ行があり、更新されたものを表示するときにテーブルを更新する
IF EXIST (SELECT COUNT(*) FROM TableA INNER JOIN TableB
ON TableA.Product_ID = TableB.ProductID
WHERE TableA.ProductID = 143)
BEGIN
UPDATE TableA
SET A.ProductID = 123
FROM TableA INNER JOIN TableB ON TableA.ProductID = Table.ProductID
WHERE TableA.ProductID = 143
END
ISSUE:表は、データを更新しますが、すべて私はレコードがある場合にのみ更新するのではなく、実行するたびに更新しているようです。たとえば、上記のクエリを実行すると、(10 row(s) affected)
というメッセージが表示されます。再度実行すると、テーブルが既に更新されており、IFステートメントで結果が得られないため、(0 row(s) affected)
を取得する必要があります。
私は同様に、以下のオプションを試してみました:
IF (SELECT COUNT(*) FROM TableA INNER JOIN TableB
ON TableA.Product_ID = TableB.ProductID
WHERE TableA.ProductID = 143) >0
BEGIN
UPDATE TableA
SET A.ProductID = 123
FROM TableA INNER JOIN TableB ON TableA.ProductID = Table.ProductID
WHERE TableA.ProductID = 143
END
問題:上記のクエリのみCommand(s) completed successfully
を返します。結果として更新される行数が必要です。どうすればそれを達成できますか?
TableBにProductID = 123の行がありますか? – DVT
@@ ROWCOUNTはあなたが探しているものだと思われますが、最初のコマンドの2回目の実行で何も更新されないと期待している理由はわかりません。 – scsimon
これを実行するとどうなりますか: "UPDATE A SETプロダクトID = 123 テーブルからA内部結合テーブルB B A.プロダクトID = B.プロダクトIDおよびB.プロダクトID <> 123; – DVT