Есть ли быстрый способ проверить, является ли ЛЮБАЯ колонка NULL?

У меня есть таблица с 20 столбцами. Помимо ввода текста:

Where column1 is null OR column2 is null OR column3 is null etc...

Есть ли более быстрый способ просто проверить каждый столбец и посмотреть, имеет ли значение значение null, и если да, верните эту запись?

Ответ 1

Нет. Есть способы закодировать его быстрее, но нет ярлыков, как вы подразумеваете. Взял из ответ, который я дал на dba.stackexchange:

DECLARE @tb NVARCHAR(255), @sql NVARCHAR(MAX);

SET @tb = N'dbo.[table]';

SET @sql = N'SELECT * FROM ' + @tb + ' WHERE 1 = 0';

SELECT @sql = @sql + N' OR ' + QUOTENAME(name) + ' IS NULL'
    FROM sys.columns 
    WHERE [object_id] = OBJECT_ID(@tb);

EXEC sp_executesql @sql;

Ответ 2

Вы можете найти имена столбцов, используя что-то вроде этого:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = <table_name> 

Затем я бы написал процедуру, используя это, и это будет циклически проходить через записи в вашей таблице и имена столбцов.

Источник: http://codesnippets.joyent.com/posts/show/337

Ответ 3

Преподавание в рыбах, вместо того, чтобы давать вам ответ:

Один из способов сделать это - создать хранимую процедуру, которая собирает и запускает динамический запрос.

Сохраненная процедура будет:

  • имеют имя таблицы в качестве входного параметра.
  • запрашивать таблицы систем метаданных для конкретной структуры таблицы.
  • динамически собирать строку (фактический запрос) с помощью операторов OR для этих столбцов таблицы.
  • запустите собранный запрос и верните результат.

Ответ 4

Это зависит от того, что быстрее.

Если вы хотите ускорить выполнение SQL Server, одна вещь, которую вы могли бы сделать, это написать триггер, чем обновить бит столбца, который указывает, является ли вся строка (кроме бита и первичного ключа) NULL. Но для этого должна быть РЕАЛЬНАЯ веская причина, так как это повлияет на производительность вашего обновления. Индексы в этих столбцах также помогут.

Если вы имеете в виду быстрее писать, вы можете заставить SQL генерировать предложение where для вас. Но, если вы не сделаете это много, это не стоит того времени, на мой взгляд.