Сомнение в запросе - SQL Server 2005 - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть таблица с 100 столбцами. здесь от 50 до 60 столбцов содержит значение NULL. Теперь мне нужно заменить это значение NULL на 0 во всех 50-60 столбцах. Я пытался с запросом на обновление как,

UPDATE [tableName] 
SET col1=0, col2 = 0, ... col60 = 0 
WHERE col1 IS NULL AND Col2 IS NULL ... Col60 IS NULL

Есть ли другой запрос для обновления всех этих 60 столбцов без указания таких столбцов, или у нас есть какой-то другой подход ???

Ответы [ 4 ]

3 голосов
/ 29 апреля 2011

Вы должны указать все столбцы, но вы можете пропустить предложение WHERE и иметь одну сделку по обновлению сразу для всех:

UPDATE [tableName] SET
  col1=COALESCE(col1, 0),
  col2=COALESCE(col2, 0),
  col3=COALESCE(col3, 0),
  col4=COALESCE(col4, 0),
  [...]
0 голосов
/ 29 апреля 2011

Чтобы не писать этот запрос вручную, вы можете сгенерировать его с помощью динамического SQL:

DECLARE @Table NVARCHAR(255)= 'Your table'
DECLARE @sSQl NVARCHAR(MAX)= 'UPDATE ' + @Table + ' SET ' + CHAR(13) ;
WITH    c AS ( SELECT   c.name
               FROM     sys.all_columns c
                        JOIN sys.tables T ON c.object_id = T.object_id
               WHERE    t.name = @Table
             )
    SELECT  @sSQl = @sSQl + c.name + '=ISNULL(' + c.name + ',0)' + ','
            + CHAR(13)
    FROM    c 
IF LEN(@sSQl) > 0 
    SET @ssql = LEFT(@sSQl, LEN(@sSQl) - 2) 

PRINT @ssql
0 голосов
/ 29 апреля 2011

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

Если вы хотите обновить отдельные столбцы, вам нужно разбить его на отдельные обновления:

update table
set col1 = 0
where col 1 is null

update table
set col2 = 0
where col2 is null
0 голосов
/ 29 апреля 2011

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

  • Отредактируйте определение таблицы и установите столбцы как "Вычисленные" и используйте 0 в качестве формулы
  • Сохранить таблицу
  • Удалить формулу

Это не очень элегантно, но работает

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