sql >> Database >  >> RDS >> Sqlserver

3 manieren om erachter te komen of een kolom een ​​berekende kolom is in SQL Server

In dit artikel worden drie manieren beschreven om T-SQL te gebruiken om erachter te komen of een kolom een ​​berekende kolom is in SQL Server.

Dit is voor als u de kolomnaam kent, maar niet weet of het een berekende kolom is.

De COLUMNPROPERTY()-functie

De COLUMNPROPERTY() functie retourneert informatie over een bepaalde kolom.

Een van de eigenschappen die door deze functie als een argument worden geaccepteerd, heet IsComputed . U krijgt een 1 als de kolom is berekend en een 0 als dit niet het geval is.

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

Resultaat:

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

In dit geval heb ik gecontroleerd of de TotalValue kolom is een berekende kolom en het resultaat is 1 , wat betekent dat het een berekende kolom is.

De systeemcatalogusweergave sys.computed_columns

De sys.computed_columns systeemcatalogusweergave bevat één rij voor elke berekende kolom in de database. U kunt daarom deze weergave opvragen om te zien of uw kolom is berekend.

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

Resultaat:

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

U kunt deze weergave ook gebruiken als u alleen de tabelnaam weet. Als u de naam van de kolom niet weet, maar u probeert gewoon te achterhalen of de tabel een berekende kolom bevat, kunt u zoiets als dit doen:

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

Resultaat:

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

In dit geval wist ik dat de tabelnaam Products was , dus ik gebruikte OBJECT_ID() om zijn ID te krijgen en dat te matchen met de object_id kolom (dit is de ID van het object waartoe de kolom behoort).

In deze voorbeelden retourneer ik slechts één kolom. Zoals bij elke weergave kunt u zoveel kolommen retourneren als u wilt. Een van de kolommen in deze weergave bevat de definitie van de berekende kolom. Hier is een zoekopdracht die alle kolommen retourneert.

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

Resultaat (met verticale uitvoer):

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

De systeemcatalogusweergave sys.columns

De sys.computed_columns view erft feitelijk zijn is_computed kolom (en een heleboel andere kolommen) van sys.columns . Daarom kunt u ook sys.columns . gebruiken om te controleren of een kolom een ​​berekende kolom is.

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

Resultaat:

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

  1. Hoe kan ik een taak plannen om dagelijks een SQL-query uit te voeren?

  2. MySQL - Hoe een willekeurig getal te genereren?

  3. De Azure-kloof overbruggen:beheerde instanties

  4. Hoe JDBC-configuratie te laden vanuit het eigenschappenbestand Voorbeeld