Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

3 cách để tìm hiểu xem một cột có phải là một cột được tính toán trong SQL Server hay không

Bài viết này trình bày ba cách sử dụng T-SQL để tìm hiểu xem một cột có phải là một cột được tính toán trong SQL Server hay không.

Điều này xảy ra khi bạn biết tên cột, nhưng bạn không biết liệu đó có phải là cột được tính toán hay không.

Hàm COLUMNPROPERTY ()

COLUMNPROPERTY() hàm trả về thông tin về một cột nhất định.

Một trong những thuộc tính được hàm này chấp nhận làm đối số được gọi là IsComputed . Bạn sẽ nhận được 1 nếu cột được tính toán và 0 nếu không.

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

Kết quả:

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

Trong trường hợp này, tôi đã kiểm tra xem TotalValue cột là một cột được tính toán và kết quả là 1 , có nghĩa là nó là một cột được tính toán.

Chế độ xem danh mục hệ thống sys.computed_columns

sys.computed_columns dạng xem danh mục hệ thống chứa một hàng cho mỗi cột được tính toán trong cơ sở dữ liệu. Do đó, bạn có thể truy vấn chế độ xem này để xem liệu cột của bạn có được tính hay không.

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

Kết quả:

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

Bạn cũng có thể sử dụng dạng xem này nếu bạn chỉ biết tên bảng. Nếu bạn không biết tên của cột, nhưng bạn chỉ đang cố gắng tìm hiểu xem bảng chứa một cột được tính toán, bạn có thể làm như sau:

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

Kết quả:

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

Trong trường hợp này, tôi biết tên bảng là Products nên tôi đã sử dụng OBJECT_ID() để lấy ID của nó và đối sánh ID đó với object_id cột (là ID của đối tượng mà cột đó thuộc về).

Trong những ví dụ này, tôi chỉ trả về một cột. Như với bất kỳ chế độ xem nào, bạn có thể trả về bao nhiêu cột tùy thích. Một trong các cột từ chế độ xem này chứa định nghĩa của cột được tính toán. Đây là một truy vấn trả về tất cả các cột.

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

Kết quả (sử dụng đầu ra dọc):

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

Chế độ xem danh mục hệ thống sys.columns

sys.computed_columns chế độ xem thực sự kế thừa is_computed của nó cột (và một loạt các cột khác) từ sys.columns . Do đó, bạn cũng có thể sử dụng sys.columns để kiểm tra xem một cột có phải là một cột được tính toán hay không.

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

Kết quả:

+---------------+
| 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. Tránh trùng lặp trong truy vấn CHÈN VÀO CHỌN trong SQL Server

  2. Cách kiểm tra ổ khóa nào được giữ trên bàn

  3. Cách tạo các câu lệnh Chèn từ Dữ liệu Excel và Tải vào Bảng SQL Server - Hướng dẫn SQL Server / TSQL Phần 103

  4. Hiển thị ngày sự kiện tiếp theo

  5. Làm cách nào để tạo yêu cầu HTTP từ máy chủ SQL?