none
Tabellen und Spalten mit NULL-Werten filtern - ? RRS feed

  • Frage

  • Hallo 2 all!

    Als "Newby" hoffe ich, dass hier so manche "blöde" Frage die sich bei einem SQL-Neuling bei der Entwicklung so stellen eine Antwort finden und ich bedanke mich schon vorab mal bei jedem der hier auch andere an seinem Wissen teilhaben lässt.

    So aber nun konkret zur Frage:

    Wir haben eine riesiege Datenbank, die beim Umstieg von einer AS400 Umgebung auf SQL-Server (SQL-SRV 2008) generiert wurde. In dieser Datenmenge haben sich in diversen Tabellen und Spalten NULL-Werte eingefunden, die jedoch in der neuen Datenbank nicht sein sollten und Probleme mit unserer Softwareanwendung (Warenwirtschaftslösung) aufwerfen.

    Nun ist meine Frage, ob ich mit einem entsprechenden SQL-Befehl oder Script alle Tabellennamen und ev. auch Spaltennamen herausfiltern kann, in denen irgend wo der Wert NULL vorkommt.

    Automatisch ersetzen kann ich NULL leider nicht, da es in manchen korrekt ist und in manchen aber auch nicht, somit bleibt nur da mal selber drüber zu schauen und dafür wäre eine große Erleichterung das nicht über alle zu machen sondern nur diejenigen, die auch NULL irgend wo enthalten.

     

    Danke für eure Tips und Vorschläge, bin für jede Arbeitserleichterung dankbar ;-)

    MfG

    Dominik 

     

     

    Dienstag, 5. Juli 2011 10:57

Antworten

  • Z.B.

    USE AdventureWorks2008R2 ;
    GO
    
    DECLARE @SchemaName SYSNAME = 'Person' ;
    DECLARE @TableName SYSNAME = 'Address' ;
    
    DECLARE @Condition NVARCHAR(MAX) = NULL ;
    
    SELECT @Condition = COALESCE(@Condition + ' OR ', '') + QUOTENAME(C.name) + ' IS NULL')
    FROM  sys.schemas S
        INNER JOIN sys.tables T ON S.schema_id = T.schema_id
        INNER JOIN sys.columns C ON T.object_id = C.object_id
    WHERE  QUOTENAME(S.name) = QUOTENAME(@SchemaName)
        AND QUOTENAME(T.name) = QUOTENAME(@TableName)
        AND C.is_nullable = 1 ;
    
    DECLARE @Sql NVARCHAR(MAX) = 'SELECT * FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' ' + 'WHERE ' + @Condition ;
    
    EXEC ( @Sql ) ;

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 5. Juli 2011 11:08
    Moderator

Alle Antworten

  • Z.B.

    USE AdventureWorks2008R2 ;
    GO
    
    DECLARE @SchemaName SYSNAME = 'Person' ;
    DECLARE @TableName SYSNAME = 'Address' ;
    
    DECLARE @Condition NVARCHAR(MAX) = NULL ;
    
    SELECT @Condition = COALESCE(@Condition + ' OR ', '') + QUOTENAME(C.name) + ' IS NULL')
    FROM  sys.schemas S
        INNER JOIN sys.tables T ON S.schema_id = T.schema_id
        INNER JOIN sys.columns C ON T.object_id = C.object_id
    WHERE  QUOTENAME(S.name) = QUOTENAME(@SchemaName)
        AND QUOTENAME(T.name) = QUOTENAME(@TableName)
        AND C.is_nullable = 1 ;
    
    DECLARE @Sql NVARCHAR(MAX) = 'SELECT * FROM ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName) + ' ' + 'WHERE ' + @Condition ;
    
    EXEC ( @Sql ) ;

    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Dienstag, 5. Juli 2011 11:08
    Moderator
  • Hezlichen Dank für die rasche Unterstützung, werd ich gleich mal versuchen!

    lg

    Dominik

    Dienstag, 5. Juli 2011 15:49