sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera en lista över beräknade kolumner i SQL Server

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.


  1. SQL Välj Kommande födelsedagar

  2. De vanligaste MySQL-frågorna

  3. SQL Server:kombinera flera rader till en rad

  4. Är sp_-prefixet fortfarande ett nej-nej?