Несколько назначений SQL Server в блоке IF или CASE WHEN

Мне было интересно, возможно ли присвоить значения нескольким полям в блоке оператора IF или CASE WHEN в SQL Server 2008? В проекте, над которым я работаю, при выполнении условия я хочу присвоить определенные значения 4 разным полям, если они не выполнены, я хочу присвоить другие значения тем же полям. См. примеры ниже. Заранее спасибо за помощь. Любой совет будет приветствоваться.

ВЫБРАТЬ С РЕГИСТРОМ, КОГДА

ВЫБРАТЬ с ЕСЛИ

SELECT  Field1
        ,Field2
        ,Field3
        CASE 
        WHEN Condtion1_Met THEN
           ,Field4 = Value4A
           ,Field5 = Value5A
           ,Field6 = Value6A
           ,Field7 = Value7A
       ELSE
           ,Field4 = Value4B
           ,Field5 = Value5B
           ,Field6 = Value6B
           ,Field7 = Value7B
       END
FROM Table1
______________________________________________

SELECT  Field1
       ,Field2
       ,Field3
       IF Condtion1_Met
          BEGIN 
             ,Field4 = Value4A
             ,Field5 = Value5A
             ,Field6 = Value6A
             ,Field7 = Value7A
          END
       ELSE
          BEGIN
             ,Field4 = Value4B
             ,Field5 = Value5B
             ,Field6 = Value6B
             ,Field7 = Value7B
          END

FROM Table1

person SQLiz    schedule 16.12.2015    source источник


Ответы (2)


Нет, это невозможно. Выражение CASE (оно считается выражением, а не оператором) может возвращать только одно значение. Он не может устанавливать несколько значений.

А оператор IF вообще нельзя использовать внутри запроса. Вместо этого вы можете сделать это:

IF Condition1_Met
 SELECT ...
ELSE
 SELECT ...
person Tab Alleman    schedule 16.12.2015
comment
То же самое, если я использую IF? - person SQLiz; 16.12.2015
comment
Я должен был указать, что это хранимая процедура. Я использовал IF раньше, и он работал, но не для нескольких заданий. - person SQLiz; 16.12.2015
comment
Неважно, что это в хранимой процедуре. Вы можете использовать IF для управления потоком, но вы не можете использовать его внутри запроса SELECT или любого другого запроса в этом отношении. Теперь, если у вас есть SQL Server 2012 или выше, и вы на самом деле говорите о IIF(), то это выражение имеет те же ограничения, что и CASE. - person Tab Alleman; 16.12.2015

В конце концов я решил использовать цикл WHILE в сочетании с операторами IF/ELSE для ОБНОВЛЕНИЯ полей в таблице.

person SQLiz    schedule 04.02.2016