T-SQL - 如果查询只返回一条记录,则需要运行更新

时间:2012-08-22 13:41:23

标签: sql tsql

我需要更新记录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语句中有更多的限制和表连接等,它们都被事务包装,但这是存储过程逻辑的要点。

我认为必须有更好的方法,但我不知道那是什么。有什么建议吗?

谢谢,戴夫

3 个答案:

答案 0 :(得分: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或更高版本。

答案 1 :(得分:0)

我认为您的代码可以正常运行!

使用@@ ROWCOUNT变量来确定SELECTE,UPDATE,INSERT语句影响的记录数:但在您的情况下,您只是将@TestCount变量设置为相同的结果!

答案 2 :(得分:0)

与我的目标相差不远,这简直就是:

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

当然,您可以用任何东西替换条件,例如具有更复杂动态条件的UDF。