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

Sådan kontrolleres, om en beregnet kolonne er "vedvarende" i SQL Server

Når du opretter en beregnet kolonne i SQL Server, har du mulighed for at markere den som "vedvarende". En vedvarende beregnet kolonne er en, der er fysisk gemt i tabellen. Hvis du ikke angiver, at den er vedvarende, vil kolonnens værdi blive beregnet, hver gang du kører en forespørgsel mod den.

Du kan forespørge på sys.computed_columns systemkatalogvisning for at finde ud af, om en beregnet kolonne er markeret som vedvarende.

Eksempel 1 – Kontrol af én beregnet kolonne

Her er et eksempel, som jeg kørte i mit testmiljø. I dette tilfælde tjekker jeg en beregnet kolonne kaldet TotalValue .

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultat:

+----------------+
| is_persisted   |
|----------------|
| 1              |
+----------------+

I dette tilfælde er kolonnen er vedblev.

Hvis du har flere beregnede kolonner med det samme navn, kan du også tilføje tabelnavnet til WHERE klausul:

SELECT is_persisted
FROM sys.computed_columns
WHERE name = 'TotalValue'
AND OBJECT_NAME(object_id) = 'Products';

Eksempel 2 – Returner alle beregnede kolonner

I dette eksempel returnerer jeg alle beregnede kolonner sammen med deres is_persisted værdier.

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

Resultat:

+----------+-------------------+----------------+
| Table    | Computed Column   | is_persisted   |
|----------+-------------------+----------------|
| Person   | FullName          | 0              |
| Products | TotalValue        | 1              |
+----------+-------------------+----------------+

Eksempel 3 – Inkluder skemaet

I dette eksempel forbinder jeg mig med sys.objects for at inkludere skemaet i resultaterne.

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;

Resultat:

+----------+----------+-------------------+----------------+
| Schema   | Table    | Computed Column   | is_persisted   |
|----------+----------+-------------------+----------------|
| dbo      | Person   | FullName          | 0              |
| dbo      | Products | TotalValue        | 1              |
+----------+----------+-------------------+----------------+

  1. SQL Server 2008 Spatial:find et punkt i polygon

  2. Android:onUpgrade kalder ikke ved databaseopgradering

  3. Sådan indstilles hvert element hentet fra SQLite-databasen til en egen tekstvisning

  4. Hvordan taler Access med ODBC-datakilder? Del 5