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 | +---------------+