добавление условного оператора в UPDATE - PullRequest
2 голосов
/ 22 сентября 2011

Запрос:

UPDATE empPac
    SET quantityLimit = allocation,
        allocationStart = '"&allocationStart&"',
        nextUpdate = DATEADD(mm, allocationMonths, "&allocationStart&"),
        lastUpdate = GETDATE(),
        quantityIssued = 0,
        quantityShipped = 0
    WHERE allocation IS NOT NULL AND
          allocationMonths <> 0 AND
          (nextUpdate <= DATEADD(mm, "&checkCondition&", GETDATE()) OR
           nextUpdate IS NULL) AND
          empIdent in (select empIdent
                       from employee
                       where custIdent='"&custIdent&"')

Что я хочу сделать, это добавить условный оператор к SET quantityLimit = allocation, чтобы вместо WHERE allocation IS NOT NULL я хотел, чтобы он имел условный оператор, такой какSET quantityLimit = ((allocation IS NULL) ? 0 : allocation)

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Вы можете использовать ISNULL():

SET quantityLimit = ISNULL(allocation, 0)

Эквивалентные функции для других баз данных: NVL() для Oracle и IFNULL() для MySQL и SQLite


Что вам действительно следует использовать, так это COALESCE(), если вы хотите увеличить переносимость вашего кода. COALESCE является частью стандарта SQL-92 и широко поддерживается в СУБД.

1 голос
/ 22 сентября 2011

Какую базу данных вы используете? Например, в oracle sql вы можете написать case when allocation is null then 0 else allocation end или nvl (allocation, 0) или coalesce (allocation, 0)

И синтаксис регистра в MSSQL такой же, как в Oracle.

0 голосов
/ 22 сентября 2011

Это способ TSQL (MSSQL):

SET quantityLimit = isnull(allocation,0)

Альтернативы ...

SET quantityLimit = CASE WHEN allocation is null THEN 0 ELSE allocation END
--This one might be handy if you wanted to check for more than just null values.  Such as:
----...CASE WHEN allocation is null THEN 0 WHEN some_other_value THEN 1 WHEN ... THEN ... ELSE allocation END

SET quantityLimit = coalesce(allocation,0)
--This one gives you the first non-null value it finds, given a list of places to look.  Such as:
----...coalesce(allocation,some_other_field,some_nuther_field,...,0)
...