2012-02-29 4 views
0

Я должен принимать значения NULL из многих столбцов. Я занимаюсь некоторыми исследованиями, но он говорит мне, что я могу сделать это за один столбец за раз, и это займет много времени. Есть ли способ лучше? Код, который у меня есть сейчас:SQL NULL OUT OF MANY COLUMNS

Update table set column1 = 0 where column1 IS NULL 

Любая помощь или идеи будут полезны. Спасибо, Michelle

+2

возможно дубликат [Обновить все значения SQL NULL в нескольких столбцах, используя условие WHERE на уровне столбца?] (http://stackoverflow.com/questions/3938958/update-all-sql-null-values-in-multiple-columns-using-column-level-where-clause) – Ryan

+0

каковы имена столбцов? –

+0

Это может быть глупый вопрос, но я все еще пытаюсь изучить sql. Мне сказали, что IS NULL возвращает логическое значение и не заменяет значение, это то же самое с coalesce? – Michelle

ответ

2

Возможно, вы захотите чего-то подобного.

Обновить таблицу set column1 = COALESCE (column1, 0), column2 = COALESCE (column2, 0), где column1 IS NULL или column2 IS NULL;

Функция COALESCE будет использовать первое значение номера, которое не равно нулю. Это означает, что если столбец1 равен нулю, то используется 0. Но если столбец 1 равен нулю, то используется 0.

Оператор OR позволит вам возвращать любые строки, имеющие нуль в столбцах column1 или column2, и обновлять их соответствующим образом.

0

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

UPDATE [TABLE] 
SET Column1 = 
    CASE 
     WHEN Column1 IS NULL THEN 0 
     ELSE Column1 
    END, 
    Column2 = 
    CASE 
     WHEN Column2 IS NULL THEN 0 
     ELSE Column2 
    END, .... 
1

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

DECLARE @sql NVARCHAR(MAX); 
DECLARE @colName NVARCHAR(MAX); 
DECLARE my_cur CURSOR FOR 
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('myTableName') AND name IN ('list', 'of', 'columns', 'you', 'care', 'about'); 

OPEN my_cur; 

FETCH NEXT FROM my_cur INTO @colName; 

WHILE @@FETCH_STATUS = 0 BEGIN  
    SET @sql = 'Update myTableName set ' + @colName +' = 0 where ' + @colName + ' IS NULL'; 
    EXEC sp_executesql @sql; 
    FETCH NEXT FROM my_cur INTO @colName; 
END 

CLOSE my_cur; 
DEALLOCATE my_cur; 
0

Вы можете использовать опцию ISNULL

UPDATE table 
    SET column1 = ISNULL(column1, 0) 
     ,column2 = ISNULL(column2, 0) 
WHERE column1 IS NULL 
    OR column2 IS NULL;