Возможно, что-то вроде этого: (copypasta ваш пример)
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
или нет, тогда ваше условие - ваш вариант, потому что объявленные переменные разрешаются до выполнения оператора.