2

我需要更新一条记录 IFF 只有一条记录符合我的搜索条件。这是我所拥有的,但它很粗糙:

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

您可以在一个查询中执行以下操作:

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 回答