我需要更新记录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语句中有更多的限制和表连接等,它们都被事务包装,但这是存储过程逻辑的要点。
我认为必须有更好的方法,但我不知道那是什么。有什么建议吗?
谢谢,戴夫
答案 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。