Обратный COALESCE

есть ли функция в SQL Server 2005, которая возвращает NULL [или логическое значение], если любой аргументов (любого типа) является NULL, что избавит меня от записи IF a IS NULL OR b IS NULL OR c IS NULL ....

Ответ 1

Вот умеренно неприятный способ сделать это:

set ansi_nulls off
if (null in (a, b, c, d, e) print 'got a null'
set ansi_nulls on

Ответ 2

Так как NULLs propogate вы можете сделать:

(cola + colb + colc) is null

при условии, что все совместимые типы данных

Ответ 3

Нет, ближе всего вы получаете NULLIF(), но это не то, что вы хотите. Я просто придерживаюсь использования инструкции OR здесь.

Ответ 4

Как насчет...

SELECT
CASE WHEN NULLIF(ISNULL(@testA, 1), @testA) 
        + NULLIF(ISNULL(@testB, 1), @testB) 
        + NULLIF(ISNULL(@testC, 1), @testC) > 0
    THEN 'Got NULL'
    ELSE 'NO NULL'
END

Ответ 5

Я не уверен в SQL Server, но в аналогичной базе данных (здесь я использовал куст, более близкий к традиционной СУБД по синтаксису) select isnull(concat(*)) from some_table; поможет проверить, является ли какой-либо из столбцов NULL.

Надеюсь, что есть какой-то способ обойти эту концепцию в SQL Server, и мое предложение помогает эффективно решить проблему.