SQL仅在条件下加入?

时间:2011-04-26 21:02:22

标签: mysql sql-server-2005

我有大约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。

1 个答案:

答案 0 :(得分:1)

也许是这样的:( copypasta你的例子)

UPDATE Y     
SET x = n
FROM Y 
WHERE something = @somevar
AND (
    (@Items IS NULL)
    OR (y.Item = @Item)
    )

JOIN未使用,但如果@itemsNULL或使用预期条件,则始终会继续。

问题在于,您的示例似乎包含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,那么您的条件是您的选择,因为声明的变量在执行语句之前已解析。

相关问题