我有大约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。
答案 0 :(得分:1)
也许是这样的:( copypasta你的例子)
UPDATE Y
SET x = n
FROM Y
WHERE something = @somevar
AND (
(@Items IS NULL)
OR (y.Item = @Item)
)
JOIN
未使用,但如果@items
为NULL
或使用预期条件,则始终会继续。
问题在于,您的示例似乎包含TVP @ITEMS
,但SQLServer2k5中不存在TVP?因此无论值是什么,都应放在参数中。
或者,如果#Table 存在但没有行,则可以执行此操作:
UPDATE Y
SET x = n
FROM Y
JOIN #Items ON (@HasRows = 0) OR (#Items.Item = Y.Item)
WHERE something = @somevar
如果您不知道是否#Items IS NULL
,那么您的条件是您的选择,因为声明的变量在执行语句之前已解析。