Perché sys.columns e INFORMATION_SCHEMA.COLUMNS visualizzano un numero diverso di colonne


11

Sto provando due metodi per visualizzare le colonne con un nome particolare:

  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'
    

Perché le query visualizzano output diversi?

Cattura schermo SSMS


Ho solo 4 colonne nel mio database, ma usando sys.columns non visualizzo 5 Record non no Perché?
Vinoth _S

3
INFORMATION_SCHEMA.COLUMNSè solo una vista sys.columnsche INNER JOINs per sys.objectse limita ai tipi di oggetti di tabella o vista. La mia ipotesi è che uno dei tuoi record sys.columnssia stato eliminato in questa restrizione.
Mark Sinkinson,

1
Entrambi sono leggermente diversi. Si prega di leggere mssqltips.com/sqlservertutorial/183/informationschemacolumns e msdn.microsoft.com/en-us/library/ms176106.aspx~~V~~singular~~1st Direi che si dovrebbe avere la documentazione di lettura prima di inviare
Shanky

Risposte:


14

La differenza tra INFORMATION_SCHEMA.COLUMNSe sys.columnsè i tipi di oggetto che coprono. INFORMATION_SCHEMA.COLUMNSè limitato a tabelle e viste. Puoi dare un'occhiata al codice dietro di esso facendo questo:

EXEC sp_helptext [INFORMATION_SCHEMA.COLUMNS]

Se guardi in basso nella clausola where vedrai

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

Qui è limitato alle sole tabelle e viste.

Se poi vai a guardare la definizione di sys.columns vedrai che include colonne per un numero di altri oggetti:

  • Funzioni di assemblaggio con valori di tabella (FT)
  • Funzioni SQL con valori di tabella incorporati (IF)
  • Tabelle interne (IT)
  • Tabelle di sistema (S)
  • Funzioni SQL con valori di tabella (TF)

Esegui questo e sarai in grado di vedere qual è l'oggetto extra e che tipo è.

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), 
    OBJECTPROPERTYEX(object_id, 'BASETYPE'), *
FROM sys.columns
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.