sql >> Database >  >> RDS >> Sqlserver

Verschil tussen sys.columns, sys.system_columns en sys.all_columns in SQL Server

Drie van de systeemcatalogusweergaven in SQL Server bevatten sys.columns , sys.system_columns , en sys.all_columns .

Deze drie catalogusweergaven bieden elk metadata over kolommen in de database, maar er is een verschil tussen beide.

Dit is wat ze allemaal doen:

sys.columns
Retourneert kolommen van door de gebruiker gedefinieerde objecten. Dit omvat kolommen uit de systeembasistabellen.
sys.system_columns
Retourneert kolommen van systeemobjecten.
sys.all_columns
Retourneert kolommen van alle door de gebruiker gedefinieerde en systeemobjecten.

Met andere woorden, de laatste weergave combineert de resultaten van de vorige twee weergaven.

De volgende objecttypen kunnen kolommen hebben:

  • Tafelwaardige assemblagefuncties (FT)
  • Inline tabelwaarde SQL-functies (IF)
  • Interne tabellen (IT)
  • Systeemtabellen (S)
  • SQL-functies met tabelwaarde (TF)
  • Gebruikerstabellen (U)
  • Beelden (V)

Voorbeeld

Hier is een voorbeeld dat het verschil in resultaten van deze weergaven laat zien.

USE Music;

SELECT COUNT(*) AS columns
FROM sys.columns;

SELECT COUNT(*) AS system_columns
FROM sys.system_columns;

SELECT COUNT(*) AS all_columns
FROM sys.all_columns;

Resultaat:

+-----------+
| columns   |
|-----------|
| 1025      |
+-----------+
(1 row affected)
+------------------+
| system_columns   |
|------------------|
| 8982             |
+------------------+
(1 row affected)
+---------------+
| all_columns   |
|---------------|
| 10007         |
+---------------+
(1 row affected)

Als we de resultaten van de eerste twee zoekopdrachten bij elkaar optellen, krijgen we hetzelfde resultaat als sys.all_columns :

USE Music;

SELECT 
(SELECT COUNT(*) FROM sys.columns) +
(SELECT COUNT(*) FROM sys.system_columns)
AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 10007    |
+----------+

  1. VBA's functie voor het wijzigen van hoofdletters

  2. SELECT-query met CASE-voorwaarde en SUM()

  3. Belang van transactielogboek in SQL Server

  4. PostgreSQL geneste JSON-query's