Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

3 начина да разберете дали една колона е изчислена колона в SQL Server

Тази статия представя три начина за използване на T-SQL, за да разберете дали дадена колона е изчислена колона в SQL Server.

Това е за случаите, когато знаете името на колоната, но не знаете дали е изчислена колона или не.

Функцията COLUMNPROPERTY()

COLUMNPROPERTY() функцията връща информация за дадена колона.

Едно от свойствата, приети като аргумент от тази функция, се нарича IsComputed . Ще получите 1, ако колоната е изчислена, и 0, ако не е.

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

Резултат:

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

В този случай проверих дали TotalValue колоната е изчислена колона и резултатът е 1 , което означава, че е изчислена колона.

Изгледът на системния каталог sys.computed_columns

sys.computed_columns изгледът на системния каталог съдържа един ред за всяка изчислена колона в базата данни. Следователно можете да направите заявка за този изглед, за да видите дали вашата колона е изчислена.

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

Резултат:

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

Можете също да използвате този изглед, ако знаете само името на таблицата. Ако не знаете името на колоната, но просто се опитвате да разберете дали таблицата съдържа изчислена колона, можете да направите нещо подобно:

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

Резултат:

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

В този случай знаех, че името на таблицата е Products , така че използвах OBJECT_ID() за да получите неговия идентификатор и да го съпоставите с object_id колона (който е идентификационният номер на обекта, към който принадлежи колоната).

В тези примери връщам само една колона. Както при всеки изглед, можете да върнете толкова колони, колкото искате. Една от колоните от този изглед съдържа дефиницията на изчислената колона. Ето заявка, която връща всички колони.

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

Резултат (с помощта на вертикален изход):

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

Изгледът на системния каталог sys.columns

sys.computed_columns изгледът всъщност наследява своя is_computed колона (и куп други колони) от sys.columns . Следователно можете да използвате и sys.columns за да проверите дали дадена колона е изчислена колона.

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL грешка с подреждане по в подзаявка

  2. Конфигурирайте SQL задания в SQL Server с помощта на T-SQL

  3. Как да увеличите допустимия размер на прикачените файлове при изпращане на имейл в SQL Server (T-SQL)

  4. Коя SQL заявка е по-бърза? Филтриране по критерии за присъединяване или клауза Къде?

  5. Как да изброя всички таблици във всички бази данни в SQL Server в един набор от резултати?