Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gibt eine Liste berechneter Spalten in SQL Server zurück

In SQL Server gibt es einige Systemkatalogansichten, mit denen Sie eine Liste berechneter Spalten in einer Datenbank abrufen können.

Eine dieser Ansichten heißt sys.computed_columns . Die andere ist sys.columns .

Die sys.computed_columns-Ansicht

Die sys.computed_columns Die Systemkatalogansicht enthält eine Zeile für jede berechnete Spalte in der Datenbank. Daher können Sie eine einfache Abfrage ausführen, um eine Liste der berechneten Spalten zu erhalten.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Ergebnis:

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

Die meisten Spalten dieser Ansicht werden von sys.columns geerbt Aussicht. Ich habe hier nur eine Handvoll eingefügt.

Einer der Vorteile dieser Ansicht gegenüber sys.columns , besteht darin, dass es die Definition der berechneten Spalte zurückgibt, was je nach Situation nützlich sein kann. Es enthält auch den is_persisted -Flag, das Ihnen mitteilt, ob die berechnete Spalte beibehalten wird oder nicht. Wenn die Spalte beibehalten wird, wird der berechnete Wert der Spalte physisch in der Tabelle gespeichert. Wenn nicht, wird sie zum Zeitpunkt der Abfrage der Spalte berechnet.

Die sys.columns-Ansicht

Sie können auch eine Abfrage für sys.columns ausführen um berechnete Spalten zurückzugeben. In diesem Fall müssen Sie die Ergebnisse so filtern, dass sie nur berechnete Spalten enthalten. Sie können dies mit einem WHERE tun -Klausel auf is_computed Spalte.

Beispiel:

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Ergebnis:

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Diese Ansicht enthält nicht die definition , is_persisted , oder die uses_database_collation Spalten, die sys.computed_columns sind enthält.