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.