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

So prüfen Sie, ob eine berechnete Spalte in SQL Server „persistent“ ist

Wenn Sie eine berechnete Spalte in SQL Server erstellen, haben Sie die Möglichkeit, sie als „persistent“ zu kennzeichnen. Eine permanente berechnete Spalte ist eine Spalte, die physisch in der Tabelle gespeichert ist. Wenn Sie nicht angeben, dass sie beibehalten wird, wird der Wert der Spalte jedes Mal berechnet, wenn Sie eine Abfrage dafür ausführen.

Sie können sys.computed_columns abfragen Systemkatalogansicht, um herauszufinden, ob eine berechnete Spalte als persistent gekennzeichnet ist.

Beispiel 1 – Überprüfung einer berechneten Spalte

Hier ist ein Beispiel, das ich in meiner Testumgebung ausgeführt habe. In diesem Fall überprüfe ich eine berechnete Spalte namens TotalValue .

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Ergebnis:

+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

In diesem Fall ist die Spalte ist bestanden.

Falls Sie mehrere berechnete Spalten mit demselben Namen haben, können Sie den Tabellennamen auch zum WHERE hinzufügen Klausel:

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Beispiel 2 – Alle berechneten Spalten zurückgeben

In diesem Beispiel gebe ich alle berechneten Spalten zusammen mit ihrem is_persisted zurück Werte.

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

Ergebnis:

+----------+-------------------+----------------+
| Table    | Computed Column   | is_persisted   |
|----------+-------------------+----------------|
| Person   | FullName          | 0              |
| Products | TotalValue        | 1              |
+----------+-------------------+----------------+

Beispiel 3 – Schema einbinden

In diesem Beispiel verbinde ich mich mit den sys.objects anzeigen, um das Schema in die Ergebnisse aufzunehmen.

SELECT 
  SCHEMA_NAME(o.schema_id) AS [Schema],
  OBJECT_NAME(cc.object_id) AS [Table],
  cc.name AS [Computed Column],
  cc.is_persisted
FROM sys.computed_columns cc
INNER JOIN sys.objects o
ON o.object_id = cc.object_id;

Ergebnis:

+----------+----------+-------------------+----------------+
| Schema   | Table    | Computed Column   | is_persisted   |
|----------+----------+-------------------+----------------|
| dbo      | Person   | FullName          | 0              |
| dbo      | Products | TotalValue        | 1              |
+----------+----------+-------------------+----------------+