Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

3 sposoby, aby dowiedzieć się, czy kolumna jest kolumną obliczaną w SQL Server

W tym artykule przedstawiono trzy sposoby wykorzystania T-SQL do sprawdzenia, czy kolumna jest kolumną obliczaną w SQL Server.

Dotyczy to sytuacji, gdy znasz nazwę kolumny, ale nie wiesz, czy jest to kolumna wyliczana.

Funkcja COLUMNPROPERTY()

COLUMNPROPERTY() funkcja zwraca informacje o danej kolumnie.

Jedna z właściwości akceptowanych jako argument przez tę funkcję nazywa się IsComputed . Otrzymasz 1, jeśli kolumna jest obliczona, a 0, jeśli nie.

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

Wynik:

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

W tym przypadku sprawdziłem, czy TotalValue kolumna jest kolumną obliczaną, a wynikiem jest 1 , co oznacza, że ​​jest to kolumna wyliczana.

Widok katalogu systemu sys.computed_columns

sys.computed_columns widok katalogu systemowego zawiera jeden wiersz dla każdej obliczonej kolumny w bazie danych. Dlatego możesz zapytać o ten widok, aby sprawdzić, czy Twoja kolumna jest obliczona.

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

Wynik:

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

Możesz również użyć tego widoku, jeśli znasz tylko nazwę tabeli. Jeśli nie znasz nazwy kolumny, ale po prostu próbujesz dowiedzieć się, czy tabela zawiera kolumnę obliczeniową, możesz zrobić coś takiego:

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

Wynik:

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

W tym przypadku wiedziałem, że nazwa tabeli to Products , więc użyłem OBJECT_ID() aby uzyskać jego identyfikator i dopasować go do object_id kolumna (jest to identyfikator obiektu, do którego należy kolumna).

W tych przykładach zwracam tylko jedną kolumnę. Jak w przypadku każdego widoku, możesz zwrócić dowolną liczbę kolumn. Jedna z kolumn z tego widoku zawiera definicję kolumny wyliczanej. Oto zapytanie, które zwraca wszystkie kolumny.

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

Wynik (przy użyciu wyjścia pionowego):

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

Widok katalogu systemu sys.columns

sys.computed_columns widok faktycznie dziedziczy swój is_computed kolumna (i kilka innych kolumn) z sys.columns . Dlatego możesz również użyć sys.columns aby sprawdzić, czy kolumna jest kolumną wyliczaną.

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

Wynik:

+---------------+
| 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. Oblicz całkowity koszt monitorowania serwera SQL

  2. Ulubione triki dostrajania wydajności

  3. Ryzyko kolizji UUID przy użyciu różnych algorytmów

  4. Jak CAST() działa w SQL Server

  5. czy istnieje przewaga varchar(500) nad varchar(8000)?