sql >> Databáze >  >> RDS >> Sqlserver

3 způsoby, jak zjistit, zda je sloupec vypočítaným sloupcem na serveru SQL

Tento článek představuje tři způsoby, jak pomocí T-SQL zjistit, zda je sloupec vypočítaným sloupcem na serveru SQL.

Toto je, když znáte název sloupce, ale nevíte, zda se jedná nebo nejedná o vypočítaný sloupec.

Funkce COLUMNPROPERTY()

COLUMNPROPERTY() Funkce vrací informace o daném sloupci.

Jedna z vlastností, kterou tato funkce přijímá jako argument, se nazývá IsComputed . Dostanete 1, pokud je sloupec vypočítán, a 0, pokud není.

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

Výsledek:

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

V tomto případě jsem zkontroloval, zda TotalValue sloupec je vypočítaný sloupec a výsledek je 1 , což znamená, že se jedná o vypočítaný sloupec.

Zobrazení katalogu systému sys.computed_columns

sys.computed_columns pohled systémového katalogu obsahuje jeden řádek pro každý vypočítaný sloupec v databázi. Můžete se tedy dotazovat na toto zobrazení a zjistit, zda je váš sloupec vypočítán.

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

Výsledek:

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

Toto zobrazení můžete také použít, pokud znáte pouze název tabulky. Pokud neznáte název sloupce, ale pouze se snažíte zjistit, zda tabulka obsahuje vypočítaný sloupec, můžete udělat něco takového:

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

Výsledek:

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

V tomto případě jsem věděl, že název tabulky je Products , takže jsem použil OBJECT_ID() získat jeho ID a porovnat ho s object_id sloupec (což je ID objektu, ke kterému sloupec patří).

V těchto příkladech vracím pouze jeden sloupec. Jako u každého zobrazení můžete vrátit tolik sloupců, kolik chcete. Jeden ze sloupců z tohoto zobrazení obsahuje definici vypočítaného sloupce. Zde je dotaz, který vrátí všechny sloupce.

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

Výsledek (při použití vertikálního výstupu):

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

Zobrazení systémového katalogu sys.columns

sys.computed_columns pohled ve skutečnosti zdědí svůj is_computed sloupec (a spousta dalších sloupců) z sys.columns . Proto můžete také použít sys.columns zkontrolovat, zda je sloupec vypočteným sloupcem.

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

Výsledek:

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

  1. 8 příkazů WP-CLI pro vyčištění a optimalizaci vašeho webu

  2. Jak zálohovat databázi Moodle MariaDB

  3. Funkce BIN_TO_NUM() v Oracle

  4. SQL Server - najít n-tý výskyt v řetězci