UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0
THEN 0
ELSE 1
END
FROM MyTable
WHERE Status = 1 )
WHERE RowNumber BETWEEN 1 AND 5
ORDER BY RowNumber
我想要做的是MyTable中只有一行,Status = 1。 当我将RowNumber 1更新为5时,如果存在Status = 1的现有记录, 那些RowNumber 1到5将更新为0.否则,只有RowNumber 1将更新为0,RowNumber 2到5将设置为0。
但上述查询无效。我想在整个查询之前运行子查询,子查询的结果是静态的,这意味着在更新另一条记录后不会将新结果作为一条记录。
使用此查询,如果表中没有Status = 1的行,则所有RowNumber 1到5都会更新为Status = 1.这不是我所期望的。
答案 0 :(得分:0)
不确定我是否完全理解了你之后的内容 - 但听起来你需要在原案例的else子句中添加嵌套的case语句。请参阅以下代码:
UPDATE MyTable SET Status = (SELECT CASE WHEN COUNT(*) > 0
THEN 0
ELSE CASE WHEN RowNumber = 1 THEN 1
ELSE 0 END
END
FROM MyTable
WHERE Status = 1 )
WHERE RowNumber BETWEEN 1 AND 5
ORDER BY RowNumber