복붙노트

[SQL] 모든 칼럼에 null 값 (들)의 모든 행을 찾기

SQL

모든 칼럼에 null 값 (들)의 모든 행을 찾기

나는 모든하지만, 1 열에서 NULL 값이있는 모든 행을 반환하는 쿼리를 만들려고 해요. 일부 행은 하나 이상의 널 (null) 입력 어딘가에있을 것이다. 내가 제외 할 것 하나 열이 때문에 모든 항목의 시간이 순간에,있다가 null이며,이 널 (null) 값을 가질 수있는 유일한 열입니다. 나는 어디에서 모든 열을 포함하는 방법을 모르기 때문에 나는 붙어입니다.

SELECT *
FROM Analytics
WHERE * IS NULL

또한, 나는 1 열의 수를 할 수 있지만 테이블은 67 개 컬럼에 대해이있다.

SELECT COUNT(*)
FROM Analytics
WHERE P_Id IS NULL

해결법

  1. ==============================

    1.SQL 서버에서는이 답변에서 아이디어를 빌릴 수

    SQL 서버에서는이 답변에서 아이디어를 빌릴 수

    ;WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance' as ns)
    SELECT *
    FROM   Analytics
    WHERE  (SELECT Analytics.*
            FOR xml path('row'), elements xsinil, type
            ).value('count(//*[local-name() != "colToIgnore"]/@ns:nil)', 'int') > 0
    

    SQL 바이올린

    가능성이 더 효율적입니다 67 열이있는 쿼리를 작성하지만, 동적 SQL이 발생하는 것은 타이핑이나 필요를 절약 할 수 있습니다.

  2. ==============================

    2.사용중인 RDBMS에 따라, 나는 동적 SQL을 사용하는 것 (명시 적으로 COL1가 null로, COL2가 NULL IS와 COL3이 ... NULL IS WHERE 말하는 것이 아니라) 유일한 옵션 생각합니다.

    사용중인 RDBMS에 따라, 나는 동적 SQL을 사용하는 것 (명시 적으로 COL1가 null로, COL2가 NULL IS와 COL3이 ... NULL IS WHERE 말하는 것이 아니라) 유일한 옵션 생각합니다.

    당신은 SQL Server 데이터베이스에서 모든 열 이름을 얻으려면 예를 들어, 당신은 그 이름을 반환하기 위해이 같은 것을 사용할 수 있습니다 :

    SELECT
         name
    FROM
         sys.columns
    WHERE
         object_id = OBJECT_ID('DB.Schema.Table')
    

    당신은 당신의 WHERE 절을 만들 FOR XML을 사용할 수 있습니다 :

    SELECT Name + ' IS NULL AND ' AS [text()]
    FROM sys.columns c1
    WHERE     object_id = OBJECT_ID('DB.Schema.Table')
    ORDER BY Name
    FOR XML PATH('')
    

    이것은 당신이 시작하는 데 도움이되기를 바랍니다.

    행운을 빕니다.

  3. ==============================

    3.나는이 가정, 테스트에 이러한 테이블이없는에는 'X'모든 필드의 데이터가, 나는 이것이 SQL-서버에서 작동합니다 생각하는,하지 (데모)

    나는이 가정, 테스트에 이러한 테이블이없는에는 'X'모든 필드의 데이터가, 나는 이것이 SQL-서버에서 작동합니다 생각하는,하지 (데모)

    참고 :! 내가 c.name로 keyColumn을 필터링 한 = 'keyColumn'

    DECLARE @S NVARCHAR(max), @Columns VARCHAR(50), @Table VARCHAR(50)
    
    SELECT @Columns = '66', --Number of cols without keyColumn
           @Table = 'myTable'
    
    SELECT @S =  ISNULL(@S+'+ ','') + 'isnull(convert(nvarchar, ' + c.name + '),''x'')'  
    FROM sys.all_columns c 
    WHERE c.object_id = OBJECT_ID(@Table) AND c.name != 'keyColumn'
    
    exec('select * from '+@Table+' where ' + @S + '= replicate(''x'',' + @Columns + ')')
    
  4. from https://stackoverflow.com/questions/14488859/find-all-rows-with-null-values-in-any-column by cc-by-sa and MIT license