it-swarm.com.de

Warum zeigen sys.columns und INFORMATION_SCHEMA.COLUMNS eine unterschiedliche Anzahl von Spalten an?

Ich versuche zwei Methoden, um die Spalten mit einem bestimmten Namen anzuzeigen:

  1. INFORMATION_SCHEMA.COLUMNS

    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME='SUPPLIER_NAME';
    
  2. SYS.COLUMNS

    SELECT *
    FROM SYS.COLUMNS
    WHERE NAME='SUPPLIER_NAME'
    

Warum zeigen die Abfragen unterschiedliche Ausgaben an?

(SSMS screen grab

11
Vinoth _S

Der Unterschied zwischen INFORMATION_SCHEMA.COLUMNS und sys.columns sind die Objekttypen, die sie abdecken. INFORMATION_SCHEMA.COLUMNS ist auf Tabellen und Ansichten beschränkt. Sie können sich den Code dahinter ansehen, indem Sie Folgendes tun:

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

Wenn Sie unten in der where-Klausel nachsehen, werden Sie sehen

o.type IN ('U', 'V')

Hier ist es nur auf die Tabellen und Ansichten beschränkt.

Wenn Sie sich dann die Definition von sys.columns ansehen, werden Sie feststellen, dass sie Spalten für eine Reihe anderer Objekte enthält:

  • Tabellenwertige Montagefunktionen (FT)
  • Inline-SQL-Funktionen mit Tabellenwert (IF)
  • Interne Tabellen (IT)
  • Systemtabellen (S)
  • SQL-Funktionen mit Tabellenwert (TF)

Wenn Sie dies ausführen, können Sie sehen, um welches zusätzliche Objekt es sich handelt und um welchen Typ es sich handelt.

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), 
    OBJECTPROPERTYEX(object_id, 'BASETYPE'), *
FROM sys.columns
14
Kenneth Fisher