sql >> Database >  >> RDS >> Sqlserver

Hoe te controleren of een berekende kolom "persistent" is in SQL Server

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              |
+----------+----------+-------------------+----------------+

  1. Kan ik een UNIQUE-beperking aan een PostgreSQL-tabel toevoegen nadat deze al is gemaakt?

  2. Maak een website met MySQL

  3. Is het mogelijk om het schema op te geven bij het verbinden met postgres met JDBC?

  4. SQLite Intersect