I SQL Server er der et par systemkatalogvisninger, der giver dig mulighed for at få en liste over beregnede kolonner i en database.
En af disse visninger kaldes sys.computed_columns
. Den anden er sys.columns
.
Sys.computed_columns-visningen
sys.computed_columns
systemkatalogvisningen indeholder en række for hver beregnet kolonne i databasen. Derfor kan du køre en simpel forespørgsel for at få en liste over beregnede kolonner.
SELECT OBJECT_NAME(object_id) AS [Parent], name AS [Computed Column], definition, is_persisted FROM sys.computed_columns;
Resultat:
+----------+-------------------+--------------------------------------+----------------+ | Parent | Computed Column | definition | is_persisted | |----------+-------------------+--------------------------------------+----------------| | Person | FullName | (concat([FirstName],' ',[LastName])) | 0 | | Products | TotalValue | ([Quantity]*[Price]) | 1 | +----------+-------------------+--------------------------------------+----------------+
De fleste af denne visnings kolonner er nedarvet fra sys.columns
udsigt. Jeg har kun inkluderet en håndfuld her.
En af fordelene ved denne visning i forhold til sys.columns
, er, at den returnerer den beregnede kolonnes definition, hvilket kan være nyttigt afhængigt af situationen. Det inkluderer også is_persisted
flag, som fortæller dig, om den beregnede kolonne er vedvarende eller ej. Hvis kolonnen bevares, gemmes kolonnens beregnede værdi fysisk i tabellen. Hvis ikke, beregnes det på det tidspunkt, du forespørger i kolonnen.
Sys.columns View
Du kan også køre en forespørgsel mod sys.columns
for at returnere beregnede kolonner. Hvis du gør dette, skal du filtrere resultaterne til kun at inkludere beregnede kolonner. Du kan gøre dette med en WHERE
klausul på is_computed
kolonne.
Eksempel:
SELECT OBJECT_NAME(object_id) as Parent, name AS [Computed Column] FROM sys.columns WHERE is_computed = 1;
Resultat:
+----------+-------------------+ | Parent | Computed Column | |----------+-------------------| | Person | FullName | | Products | TotalValue | +----------+-------------------+
Denne visning indeholder ikke definition
, is_persisted
, eller uses_database_collation
kolonner, der sys.computed_columns
indeholder.