sql >> Database >  >> RDS >> Sqlserver

Een lijst met berekende kolommen retourneren in SQL Server

In SQL Server zijn er een aantal systeemcatalogusweergaven waarmee u een lijst met berekende kolommen in een database kunt krijgen.

Een van deze weergaven heet sys.computed_columns . De andere is sys.columns .

De weergave sys.computed_columns

De sys.computed_columns systeemcatalogusweergave bevat één rij voor elke berekende kolom in de database. Daarom kunt u een eenvoudige query uitvoeren om een ​​lijst met berekende kolommen te krijgen.

SELECT 
  OBJECT_NAME(object_id) AS [Parent],
  name AS [Computed Column],
  definition,
  is_persisted
FROM sys.computed_columns;

Resultaat:

+----------+-------------------+--------------------------------------+----------------+
| Parent   | Computed Column   | definition                           | is_persisted   |
|----------+-------------------+--------------------------------------+----------------|
| Person   | FullName          | (concat([FirstName],' ',[LastName])) | 0              |
| Products | TotalValue        | ([Quantity]*[Price])                 | 1              |
+----------+-------------------+--------------------------------------+----------------+

De meeste kolommen van deze weergave zijn overgenomen van de sys.columns weergave. Ik heb hier slechts een handvol toegevoegd.

Een van de voordelen van deze weergave ten opzichte van sys.columns , is dat het de definitie van de berekende kolom retourneert, wat handig kan zijn, afhankelijk van de situatie. Het bevat ook de is_persisted vlag, die u vertelt of de berekende kolom behouden blijft. Als de kolom blijft bestaan, wordt de berekende waarde van de kolom fysiek in de tabel opgeslagen. Zo niet, dan wordt het berekend op het moment dat u de kolom doorzoekt.

De weergave sys.columns

U kunt ook een query uitvoeren op sys.columns berekende kolommen retourneren. Als u dit doet, moet u de resultaten filteren om alleen berekende kolommen op te nemen. U kunt dit doen met een WHERE clausule op de is_computed kolom.

Voorbeeld:

SELECT 
  OBJECT_NAME(object_id) as Parent,
  name AS [Computed Column]
FROM sys.columns
WHERE is_computed = 1;

Resultaat:

+----------+-------------------+
| Parent   | Computed Column   |
|----------+-------------------|
| Person   | FullName          |
| Products | TotalValue        |
+----------+-------------------+

Deze weergave bevat niet de definition , is_persisted , of de uses_database_collation kolommen die sys.computed_columns bevat.


  1. Hoe een UPSERT uit te voeren zodat ik zowel nieuwe als oude waarden in update-gedeelte kan gebruiken

  2. MySQL-vergelijking met null-waarde

  3. Lijst met datum/tijd-indelingselementen in Oracle

  4. MySQL Group_Concat() versus T-SQL String_Agg()