Wanneer u een berekende kolom in SQL Server maakt, heeft u de mogelijkheid om deze te markeren als "aanhoudend". Een persistente berekende kolom is een kolom die fysiek in de tabel is opgeslagen. Als u niet opgeeft dat het blijft bestaan, wordt de waarde van de kolom berekend telkens wanneer u er een query op uitvoert.
U kunt de sys.computed_columns
. opvragen systeemcatalogusweergave om te zien of een berekende kolom is gemarkeerd als blijvend.
Voorbeeld 1 – Eén berekende kolom controleren
Hier is een voorbeeld dat ik in mijn testomgeving heb uitgevoerd. In dit geval controleer ik een berekende kolom met de naam TotalValue
.
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue';
Resultaat:
+----------------+ | is_persisted | |----------------| | 1 | +----------------+
In dit geval is de kolom is volgehouden.
Als u meerdere berekende kolommen met dezelfde naam heeft, kunt u de tabelnaam ook toevoegen aan de WHERE
clausule:
SELECT is_persisted FROM sys.computed_columns WHERE name = 'TotalValue' AND OBJECT_NAME(object_id) = 'Products';
Voorbeeld 2 – Alle berekende kolommen retourneren
In dit voorbeeld retourneer ik alle berekende kolommen, samen met hun is_persisted
waarden.
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Computed Column], is_persisted FROM sys.computed_columns;
Resultaat:
+----------+-------------------+----------------+ | Table | Computed Column | is_persisted | |----------+-------------------+----------------| | Person | FullName | 0 | | Products | TotalValue | 1 | +----------+-------------------+----------------+
Voorbeeld 3 – Voeg het schema toe
In dit voorbeeld doe ik mee met de sys.objects
om het schema in de resultaten op te nemen.
SELECT SCHEMA_NAME(o.schema_id) AS [Schema], OBJECT_NAME(cc.object_id) AS [Table], cc.name AS [Computed Column], cc.is_persisted FROM sys.computed_columns cc INNER JOIN sys.objects o ON o.object_id = cc.object_id;
Resultaat:
+----------+----------+-------------------+----------------+ | Schema | Table | Computed Column | is_persisted | |----------+----------+-------------------+----------------| | dbo | Person | FullName | 0 | | dbo | Products | TotalValue | 1 | +----------+----------+-------------------+----------------+