Når du opretter en beregnet kolonne i SQL Server, har du mulighed for at markere den som "vedvarende". En vedvarende beregnet kolonne er en, der er fysisk gemt i tabellen. Hvis du ikke angiver, at den er vedvarende, vil kolonnens værdi blive beregnet, hver gang du kører en forespørgsel mod den.
Du kan forespørge på sys.computed_columns
systemkatalogvisning for at finde ud af, om en beregnet kolonne er markeret som vedvarende.
Eksempel 1 – Kontrol af én beregnet kolonne
Her er et eksempel, som jeg kørte i mit testmiljø. I dette tilfælde tjekker jeg en beregnet kolonne kaldet TotalValue
.
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
Resultat:
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
I dette tilfælde er kolonnen er vedblev.
Hvis du har flere beregnede kolonner med det samme navn, kan du også tilføje tabelnavnet til WHERE
klausul:
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
Eksempel 2 – Returner alle beregnede kolonner
I dette eksempel returnerer jeg alle beregnede kolonner sammen med deres is_persisted
værdier.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
Resultat:
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
Eksempel 3 – Inkluder skemaet
I dette eksempel forbinder jeg mig med sys.objects
for at inkludere skemaet i resultaterne.
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;
Resultat:
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+