I SQL Server finns det ett par systemkatalogvyer som gör att du kan få en lista över beräknade kolumner i en databas.
En av dessa vyer kallas sys.computed_columns
. Den andra är sys.columns
.
Vyn sys.computed_columns
sys.computed_columns
systemkatalogvyn innehåller en rad för varje beräknad kolumn i databasen. Därför kan du köra en enkel fråga för att få en lista över beräknade kolumner.
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 flesta av denna vys kolumner ärvs från sys.columns
se. Jag har bara tagit med en handfull här.
En av fördelarna med denna vy över sys.columns
, är att den returnerar den beräknade kolumns definition, vilket kan vara användbart beroende på situationen. Den inkluderar även is_persisted
flagga, som talar om för dig om den beräknade kolumnen finns kvar eller inte. Om kolumnen kvarstår lagras kolumnens beräknade värde fysiskt i tabellen. Om inte, beräknas den när du frågar i kolumnen.
Vyn sys.columns
Du kan också köra en fråga mot sys.columns
för att returnera beräknade kolumner. Om du gör detta måste du filtrera resultaten så att de bara inkluderar beräknade kolumner. Du kan göra detta med en WHERE
sats på is_computed
kolumn.
Exempel:
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 | +----------+-------------------+
Den här vyn innehåller inte definition
, is_persisted
, eller uses_database_collation
kolumner som sys.computed_columns
innehåller.