Trong SQL Server, bạn có thể sử dụng sys.columns
chế độ xem danh mục hệ thống để trả về danh sách các cột không được tính toán từ một bảng.
"Không được tính toán", ý tôi chỉ đơn giản là các cột không phải là các cột được tính toán.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT name AS [Column], TYPE_NAME(user_type_id) AS [Data Type], max_length, is_computed FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Products' AND is_computed = 0;
Kết quả:
+-------------+-------------+--------------+---------------+ | Column | Data Type | max_length | is_computed | |-------------+-------------+--------------+---------------| | ProductID | int | 4 | 0 | | ProductName | varchar | 255 | 0 | | Quantity | smallint | 2 | 0 | | Price | money | 8 | 0 | +-------------+-------------+--------------+---------------+
sys.columns
chế độ xem trả về rất nhiều cột, vì vậy tôi đã thu hẹp chúng ở đây chỉ còn một số ít.
Trong trường hợp này, tên bảng là Products
. Nếu tôi không lọc theo cách đó, tôi sẽ nhận được một danh sách rất lớn các cột từ tất cả các bảng (bao gồm cả bảng hệ thống), chế độ xem, các hàm được định giá trong bảng, v.v.
Tôi đã bao gồm is_computed
ở đây để bạn có thể thấy rằng các cột này có 0
trong cột đó.
Tôi tình cờ biết rằng bảng này có một cột được tính toán có tên là TotalValue
. Đây là truy vấn một lần nữa, nhưng lần này trả về tất cả các cột (bao gồm cả các cột được tính toán).
SELECT name AS [Column], TYPE_NAME(user_type_id) AS [Data Type], max_length, is_computed FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Products';
Kết quả:
+-------------+-------------+--------------+---------------+ | Column | Data Type | max_length | is_computed | |-------------+-------------+--------------+---------------| | ProductID | int | 4 | 0 | | ProductName | varchar | 255 | 0 | | Quantity | smallint | 2 | 0 | | Price | money | 8 | 0 | | TotalValue | money | 8 | 1 | +-------------+-------------+--------------+---------------+