2011-09-22 4 views
2

저는 SQL을 처음 사용합니다. 나는이 프로젝트에서 어디에 무언가가 null인지 확인해야만하고, 만약 그것을 0으로 변경해야만한다. 그러나 이것과 많은 컬럼을해야 할 많은 테이블이있다. 난 모든 테이블의 모든 열을 검사하는 대신 nulls에 대한 전체 테이블을 확인할 수있는 방법이 있는지 궁금 해서요.SQL 질문 확인 null

+0

플랫폼은 무엇입니까? 미시시피 SQL 서버, MySQL은, 오라클 ..? –

+0

멋진 사진 : - P 'a' 열을 확인하려면'a is NULL '을 사용하십시오. 'a가 NULL 인 곳을 a = 0으로 설정하는 업데이트 테이블 '. – TMS

+0

당신은 그것의 바로 SQL이야. SQL 프로그래밍 언어 ontop을 사용하지 않으십니까? –

답변

2

미셸, 아니요, 모든 열을 NULLS으로 확인해야합니다. 더 큰 문제는 NULLS이 허용되는 이유는 무엇입니까? 데이터베이스에 NULLS을 절대 가지고 있지 않은데 대한 지지자는 아니지만 (테이블에 NULL 값이 너무 많음) 데이터베이스가 올바르게 정규화되지 않았거나 다른 아키텍처 문제가 있음을 나타내는 좋은 지표입니다.

+0

나는 그들이 각각의 필드를 개별적으로 점검하고 싶지 않은 테이블의 과다한 양을 말하고 있다고 생각하지 않는다. –

+0

예 오웬은 내가 의사 소통에 부족함을 드려 죄송합니다. – Michelle

+0

"정상적으로 적절히 정상화 된"것은 본질적으로 의미가 없습니다. 제안 된 대안 : "정규화 된"은 [1NF] (http://en.wikipedia.org/wiki/First_normal_form) 이상을 의미하고, "완전 정규화"는 [5NF]를 의미합니다 (http://en.wikipedia.org/wiki/Fifth_normal_form) 또는 더 높게. – onedaywhen

0

NULL 값을 0으로 변경해야하므로 가장 쉬운 방법은 COALESCE(value, 0)을 사용하는 것입니다.

COALESCE(value, value2, value3)

는 같은 CASE 문에 대한 바로 가기입니다

CASE 
    WHEN value1 IS NOT NULL THEN value1 
    WHEN value2 IS NOT NULL THEN value2 
    ... 
END 

편집 : 실제로 테이블에 모두 0으로 NULLS를 업데이트하려면, 다음과 같은 SQL 문 할 수있는 :

SELECT 'UPDATE ' 
     + OBJECT_NAME(OBJECT_ID) 
     + ' SET ' 
     + sc.name 
     + ' = 0 WHERE ' 
     + sc.name 
     + ' IS NULL'   
FROM sys.columns sc 
     INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id 
WHERE st.name IN ('bigint', 'int', 'smallint')   
     AND OBJECT_NAME(OBJECT_ID) = 'YourTable' 

텍스트 문자열을 복사하여 붙여 넣거나 실행하거나 프로그램 방식으로 루프에서 실행할 수 있어야하는 것은 어느 것입니까? 그것은 숫자 데이터 유형을 가진 컬럼에 따라 다르며 실제로 널 (null)로 유지하려는 컬럼이있는 컬럼이 있으면 위험 할 수 있습니다. 모든 테이블에 대해 WHERE 절의 마지막 부분을 실행하여 테스트를 수행 할 수 있지만 사전에 테스트하고 유효성을 검사 할 수 있습니다.

테스트 할 준비가되지 않은 상태에서 SQL Server 인스턴스가 없으므로 일반적인 "자체 사용으로 인한 책임"에 대한 고지 사항이 있습니다. :-)

+0

* * 열이 NULL인지 식별하지 않습니다. 모든 열이 'NULL'또는 'NOT NULL'인 경우에만. OP는 여전히 0으로 업데이트하기 위해 'NULL'열을 식별해야합니다. – Wil

+0

@Wil, NULL 인 경우 숫자 열을 0으로 업데이트하는 (bruteforce, 다소 hackish 한) 방법을 포함하도록 답변을 업데이트했습니다. – bhamby

0

플랫폼에 따라 다르지만 경우에 따라 시스템 테이블 정보를 사용하여 모든 열의 목록을 가져와이를 사용하여 모든 테이블의 모든 열을 확인하는 쿼리를 생성 할 수 있습니다.

그러나 이는 상당히 해킹 될 수 있습니다. 진짜 질문은 a) 왜 그렇게 많은 null이 있는지 (좋은 이유가있을 수 있지만, Wil 당 구조가 잘못되었음을 암시한다) 그리고 b) 왜 모두를 0으로 바꿀 필요가 있는가? 이것은 숫자 필드에만 적용됩니까? 명확한 해결책이 명확 해지기 전에 질문해야 할 다른 많은 질문이 있습니다.

0
Select nvl(col,'0') from table ; 

NVL은 oracle에서 정상적으로 작동합니다.

NVL은 col이 null인지 확인하고, null 인 경우 0으로 변경합니다.