Есть ли лучший способ применить isnull ко всем столбцам, чем то, что я делаю? - PullRequest
1 голос
/ 27 декабря 2011

Сколько раз за последний месяц мне приходилось заменять 'пустые' поля на '0' для каждого столбца, возвращаемого из запроса.

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

select      ',  isnull(' + COLUMN_NAME + ', 0)' + ' as ' + COLUMN_NAME
from        INFORMATION_SCHEMA.COLUMNS
where       TABLE_NAME = 'summary_by_scca_sales_category '
            and TABLE_SCHEMA = 'property''

По сути, мне интересно, есть ли лучший способ сделать это? В идеале метод, в котором я мог бы автоматически применять isnull ко всем столбцам, возвращаемым в запросе (без использования двух запросов).

Например:

Я хочу получить запрос вроде:

select  *
from    tablename

И для каждого столбца, возвращаемого *, замените нулевые результаты на 0 без необходимости писать строку isnull () для каждого столбца.

редактировать :

Достигну этого с целью (до, я должен был подумать об этом). Ради интересов / образования, есть ли способ сделать что-то подобное с помощью кода?

1 Ответ

7 голосов
/ 27 декабря 2011

Вы можете создать VIEW для рассматриваемых таблиц, в которых установлена ​​необходимая логика ISNULL. Тогда запросы к представлениям вернут нужные вам данные.

EDIT:

По запросу, некоторый пример кода для автоматического создания VIEW s. Это довольно грубо, но для чего-то, что нужно запустить только после того, как это сработает. Остерегайтесь проблем типа (вы указали, что все должно преобразовываться в 0, поэтому я предполагаю, что все ваши столбцы имеют подходящий числовой тип):

DECLARE @table_def varchar(max)
SET @table_def = 'CREATE VIEW <tname>_NoNull AS SELECT '

SELECT @table_def = REPLACE(@table_def, '<tname>', t.name) + 
    'ISNULL(' + c.name + ', 0) AS ' + c.name + ', '
FROM sys.tables t
    INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = <<table name>>

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