Есть ли быстрый способ проверить, является ли ЛЮБОЙ столбец NULL? - PullRequest
13 голосов
/ 14 марта 2012

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

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

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

Ответы [ 4 ]

6 голосов
/ 14 марта 2012

Нет. Есть способы, чтобы закодировать это быстрее, но нет таких ярлыков, как вы подразумеваете. Взято из ответа, который я дал на 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;
3 голосов
/ 14 марта 2012

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

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

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

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

0 голосов
/ 14 марта 2012

Ответ типа «учить рыбе вместо того, чтобы давать рыбе» здесь:

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

Хранимая процедура будет:

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

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

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

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

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