sql >> Database teknologi >  >> RDS >> Sqlserver

Returner en liste over beregnede kolonner i SQL Server

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.


  1. Skift Database Collation, Ctype i Postgresql

  2. Spørgsmål at stille, før du starter en database

  3. Konverter en strengdato til datetime i Oracle

  4. Sådan konverteres datetime til UTC i MySQL