2

検索条件に一致するレコードが 1 つしかない場合、レコードを更新する必要があります。ここに私が持っているものがありますが、それは粗雑です:

DECLARE @TestCount INT;

SELECT @TestCount = COUNT(*)
FROM TestRecords tr
WHERE
    tr.UnitSerial = @UnitSerial
      AND
    tr.PassFailStatus = 1;

IF (@TestCount = 1)
UPDATE
    TestRecords
SET
    Invalid = 1
WHERE
    TestRecordID = 
           (SELECT TestRecordID
            FROM TestRecords tr
            WHERE
            tr.UnitSerial = @UnitSerial
              AND
            tr.PassFailStatus = 1);

もちろんこれはサンプル コードです。SELECT ステートメントにはさらに多くの制限やテーブル ジョインなどがあり、すべてトランザクションでラップされていますが、これがストアド プロシージャ ロジックの要点です。

もっといい方法があればいいのにと思うのですが、それが何なのかわかりません。助言がありますか?

ありがとう、デイブ

4

3 に答える 3

4

次のように 1 つのクエリで実行できます。

with toupdate as (
     select tr.*,
            count(*) over () as cnt
     from TestRecords tr
     where tr.UnitSerial = @UnitSerial AND tr.PassFailStatus = 1
    )
update toupdate
    set Invalid = 1
    where cnt = 1

これは、SQL 2005 以降を使用していることを前提としています。

于 2012-08-22T13:45:13.637 に答える
0

あなたのコードは問題なく実行されると思います!

@@ROWCOUNT 変数を使用して、SELECTE、UPDATE、INSERT ステートメントによって影響を受けたレコードの数を特定します。ただし、この場合、@TestCount 変数を同じ結果に設定しただけです!

于 2012-08-22T13:44:52.647 に答える
0

それは私がすることから遠く離れていません。それは単純です:

IF (SELECT COUNT(*) FROM x WHERE y = z) = 1
BEGIN
    --statements
END

もちろん、より複雑な動的条件を持つ UDF など、条件を任意のものに置き換えることができます。

于 2012-08-22T13:45:51.750 に答える