SQL Join только при условии? - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть около 10 различных операторов SQL, которые обновляют разные таблицыОни выглядят примерно так:

Update Y 
SET x = n
Where something = @somevar

Теперь мне нужно обновить только определенные строки, когда установлена ​​переменная @hasRows.Я мог бы просто сделать это:

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 Ответ

1 голос
/ 27 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...