我有大约 10 个不同的 sql 语句来更新不同的表。它们看起来类似于:
Update Y
SET x = n
Where something = @somevar
现在,当设置了@hasRows var 时,我只需要更新某些行。我可以简单地这样做:
if not @hasRows is null
begin
Update Y
SET x = n
from Y inner join #items on y.Item = #items.Item
Where something = @somevar
end
else
begin
Update Y
SET x = n
Where something = @somevar
end
有没有办法避免 if/else 并在一条语句中进行更新?
我正在使用 SQL2005。
最佳答案
也许是这样的:(复制你的例子)
UPDATE Y
SET x = n
FROM Y
WHERE something = @somevar
AND (
(@Items IS NULL)
OR (y.Item = @Item)
)
未使用 JOIN
,但如果 @items
为 NULL
或使用预期条件,它始终会继续。
这里的问题是您的示例似乎包含一个 TVP @ITEMS
但 TVP 在 SQLServer2k5 中不存在?所以无论值是什么都应该放在参数中。
或者,如果#Table 存在但没有行,您可以这样做:
UPDATE Y
SET x = n
FROM Y
JOIN #Items ON (@HasRows = 0) OR (#Items.Item = Y.Item)
WHERE something = @somevar
如果您不知道 #Items IS NULL
是否为 NULL,那么您的条件是您的选择,因为声明的变量在语句执行之前被解析。
关于mysql - SQL仅在条件下加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796407/