sql >> Databasteknik >  >> RDS >> Sqlserver

3 sätt att ta reda på om en kolumn är en beräknad kolumn i SQL Server

Den här artikeln presenterar tre sätt att använda T-SQL för att ta reda på om en kolumn är en beräknad kolumn i SQL Server.

Detta är för när du känner till kolumnnamnet, men du inte vet om det är en beräknad kolumn.

Funktionen COLUMNPROPERTY()

COLUMNPROPERTY() funktion returnerar information om en given kolumn.

En av egenskaperna som accepteras som argument av denna funktion kallas IsComputed . Du får en 1 om kolumnen beräknas och en 0 om den inte är det.

SELECT 
  COLUMNPROPERTY(
    OBJECT_ID('dbo.Products'), 
    'TotalValue', 
    'IsComputed') 
    AS [Computed Column?];

Resultat:

+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

I det här fallet kollade jag för att se om TotalValue kolumn är en beräknad kolumn och resultatet är 1 , vilket betyder att det är en beräknad kolumn.

Systemkatalogvyn sys.computed_columns

sys.computed_columns systemkatalogvyn innehåller en rad för varje beräknad kolumn i databasen. Du kan därför fråga den här vyn för att se om din kolumn är beräknad.

SELECT is_computed AS [Computed Column?]
FROM sys.computed_columns
WHERE name = 'TotalValue';

Resultat:

+--------------------+
| Computed Column?   |
|--------------------|
| 1                  |
+--------------------+

Du kan också använda den här vyn om du bara känner till tabellnamnet. Om du inte vet namnet på kolumnen, men du bara försöker ta reda på om tabellen innehåller en beräknad kolumn, kan du göra något så här:

SELECT name AS [Computed Column]
FROM sys.computed_columns
WHERE object_id = OBJECT_ID('dbo.Products');

Resultat:

+-------------------+
| Computed Column   |
|-------------------|
| TotalValue        |
+-------------------+

I det här fallet visste jag att tabellnamnet var Products , så jag använde OBJECT_ID() för att få dess ID och matcha det med object_id kolumn (vilket är ID för objektet som kolumnen tillhör).

I dessa exempel returnerar jag bara en kolumn. Som med alla vyer kan du returnera så många kolumner du vill. En av kolumnerna från den här vyn innehåller den beräknade kolumns definition. Här är en fråga som returnerar alla kolumner.

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

Resultat (med vertikal utdata):

object_id                           | 814625945
name                                | TotalValue
column_id                           | 5
system_type_id                      | 60
user_type_id                        | 60
max_length                          | 8
precision                           | 19
scale                               | 4
collation_name                      | NULL
is_nullable                         | 1
is_ansi_padded                      | 0
is_rowguidcol                       | 0
is_identity                         | 0
is_filestream                       | 0
is_replicated                       | 0
is_non_sql_subscribed               | 0
is_merge_published                  | 0
is_dts_replicated                   | 0
is_xml_document                     | 0
xml_collection_id                   | 0
default_object_id                   | 0
rule_object_id                      | 0
definition                          | ([Quantity]*[Price])
uses_database_collation             | 1
is_persisted                        | 1
is_computed                         | 1
is_sparse                           | 0
is_column_set                       | 0
generated_always_type               | 0
generated_always_type_desc          | NOT_APPLICABLE
encryption_type                     | NULL
encryption_type_desc                | NULL
encryption_algorithm_name           | NULL
column_encryption_key_id            | NULL
column_encryption_key_database_name | NULL
is_hidden                           | 0
is_masked                           | 0
graph_type                          | NULL
graph_type_desc                     | NULL

Systemkatalogvyn sys.columns

sys.computed_columns vyn ärver faktiskt sin is_computed kolumn (och ett gäng andra kolumner) från sys.columns . Därför kan du också använda sys.columns för att kontrollera om en kolumn är en beräknad kolumn.

SELECT is_computed
FROM sys.columns
WHERE name = 'TotalValue';

Resultat:

+---------------+
| is_computed   |
|---------------|
| 1             |
+---------------+

  1. Förstå molnbaserad SQL Server-prestandaövervakning

  2. Hur man hittar kolumnnamn för alla tabeller i alla databaser i SQL Server

  3. Kontrollera efter misslyckad e-post i SQL Server (T-SQL)

  4. Vad gör den här frågan för att skapa SQL Server med kommaavgränsad lista?