Denne artikel præsenterer tre måder at bruge T-SQL til at finde ud af, om en kolonne er en beregnet kolonne i SQL Server.
Dette er til, når du kender kolonnenavnet, men du ikke ved, om det er en beregnet kolonne.
Funktionen COLUMNPROPERTY()
COLUMNPROPERTY()
funktion returnerer information om en given kolonne.
En af egenskaberne, der accepteres som argument af denne funktion, kaldes IsComputed
. Du får et 1, hvis kolonnen er beregnet, og et 0, hvis det ikke er det.
SELECT COLUMNPROPERTY( OBJECT_ID('dbo.Products'), 'TotalValue', 'IsComputed') AS [Computed Column?];
Resultat:
+----------------------------+| Beregnet kolonne? ||------------------------|| 1 |+---------------------------+
I dette tilfælde tjekkede jeg om TotalValue
kolonne er en beregnet kolonne, og resultatet er 1
, hvilket betyder, at det er en beregnet kolonne.
Systemkatalogvisningen sys.computed_columns
sys.computed_columns
systemkatalogvisningen indeholder en række for hver beregnet kolonne i databasen. Du kan derfor forespørge i denne visning for at se, om din kolonne er beregnet.
SELECT is_computed AS [Computed Column?]FROM sys.computed_columnsWHERE name ='TotalValue';
Resultat:
+----------------------------+| Beregnet kolonne? ||------------------------|| 1 |+---------------------------+
Du kan også bruge denne visning, hvis du kun kender tabellens navn. Hvis du ikke kender navnet på kolonnen, men du prøver blot at finde ud af, om tabellen indeholder en beregnet kolonne, kan du gøre noget som dette:
VÆLG navn SOM [Computed Column]FRA sys.computed_columnsWHERE object_id =OBJECT_ID('dbo.Products');
Resultat:
+------------------------+| Beregnet kolonne ||------------------------|| Samlet værdi |+--------------------+
I dette tilfælde vidste jeg, at tabelnavnet var Products
, så jeg brugte OBJECT_ID()
for at få sit ID og matche det med object_id
kolonne (som er ID'et for det objekt, som kolonnen tilhører).
I disse eksempler returnerer jeg kun én kolonne. Som med enhver visning kan du returnere så mange kolonner, som du vil. En af kolonnerne fra denne visning indeholder den beregnede kolonnes definition. Her er en forespørgsel, der returnerer alle kolonner.
VÆLG *FROM sys.computed_columnsWHERE name ='TotalValue';
Resultat (ved hjælp af lodret output):
Systemkatalogvisningen sys.columns
sys.computed_columns
view arver faktisk sin is_computed
kolonne (og en masse andre kolonner) fra sys.columns
. Derfor kan du også bruge sys.columns
for at kontrollere, om en kolonne er en beregnet kolonne.
SELECT is_computedFROM sys.columnsWHERE name ='TotalValue';
Resultat:
+----------------+| is_computed ||--------------|| 1 |+----------------+