2012-02-29 2 views
0

많은 컬럼에서 NULL 값을 가져야합니다. 나는 약간의 연구를 해왔지만 한 번에 하나의 컬럼을 위해 그것을 할 수 있고 오랜 시간이 걸릴 것이라고 말한다. 더 좋은 방법이 있습니까? 지금 당장 가지고있는 코드는 다음과 같습니다.많은 컬럼 중 SQL NULL이

Update table set column1 = 0 where column1 IS NULL 

도움이나 아이디어가 도움이 될 것입니다. 감사합니다, 미셸

+2

가능한 중복 열 수준 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이 부울을 반환하고 값을 대체하지 않는다고 들었습니다. 병합과 동일합니까? – Michelle

답변

2

당신은 아마 이와 같은 것을 원할 것입니다.

요금 테이블 세트 컬럼 1 = COALESCE (컬럼 1, 0) = COALESCE 2 열 (2 열, 0)가 null 컬럼 1 또는 2 열은 NULL이고;

COALESCE 함수는 null이 아닌 첫 번째 숫자 값을 사용합니다. 즉, column1이 널 (NULL)이면 0이 g 용됩니다. 그러나 column1이 널 (NULL)이면 0이 사용됩니다.

OR 문을 사용하면 column1 또는 column2에 널 (NULL)이있는 행을 리턴하고 그에 따라이를 갱신 할 수 있습니다.

0

잘 모르겠 으면 여러 열을 교차하는 테이블에서 모든 null을 제거 하시겠습니까? 감사는 문제가없는 경우, 당신은 단지 같은 것을 할 수 있습니다 :

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; 
모든 SQL NULL 값을 업데이트 [의