Trong SQL Server, có một số cách để lấy siêu dữ liệu của tập kết quả từ một truy vấn. Điều này bao gồm kiểu dữ liệu của các cột được trả về bởi truy vấn T-SQL.
Đặc biệt, sys.dm_exec_describe_first_result_set
chức năng quản lý động hệ thống là một lựa chọn tốt cho một nhiệm vụ như vậy.
Ví dụ
Dưới đây là một ví dụ để minh họa cách sử dụng sys.dm_exec_describe_first_result_set
để nhận thông tin kiểu dữ liệu về mỗi cột được trả về bởi một truy vấn T-SQL nhất định.
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set(
'select * from Clients',
null,
0);
Kết quả:
+------------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |------------+------------------+--------------------+--------------+-------------+---------| | ClientCode | clientcode | varchar(8) | 8 | 0 | 0 | | FirstName | NULL | varchar(60) | 60 | 0 | 0 | | LastName | NULL | varchar(60) | 60 | 0 | 0 | +------------+------------------+--------------------+--------------+-------------+---------+
Trong trường hợp này, ba hàng được trả về, mỗi hàng đại diện cho một cột sẽ được trả về bởi truy vấn mà tôi đang phân tích.
Bạn có thể nhận thấy rằng một trong các cột sử dụng bí danh kiểu dữ liệu do người dùng xác định được gọi là mã máy khách . Khi bạn tạo bí danh kiểu dữ liệu do người dùng xác định, bạn căn cứ vào kiểu hệ thống hiện có. Điều này được phản ánh trong kết quả trên. Chúng tôi có thể thấy rằng mã máy khách dựa trên varchar (8) .
sys.dm_exec_describe_first_result_set
hàm trả về rất nhiều cột, vì vậy hãy bao gồm tất cả các cột để xem liệu có bất kỳ cột nào khác mà bạn có thể thấy hữu ích hay không. Cũng xem Cách làm sys.dm_exec_describe_first_result_set
Hoạt động để có giải thích chi tiết hơn và nhiều ví dụ hơn.
Bạn cũng có thể sử dụng sp_describe_first_result_set
hệ thống lưu trữ thủ tục để trả về cùng một thông tin (nó sử dụng cùng một thuật toán như sys.dm_exec_describe_first_result_set
).
Bộ kết quả thủ tục được lưu trữ
Nếu bạn muốn nhận kiểu dữ liệu của các cột được trả về bởi một thủ tục được lưu trữ, bạn có thể sử dụng sys.dm_exec_describe_first_result_set_for_object
chức năng.
Hàm này sử dụng cùng một thuật toán như hàm trước, nhưng sự khác biệt là hàm này chấp nhận ID của một thủ tục hoặc trình kích hoạt được lưu trữ làm đối số đầu tiên của nó (thay vì lô T-SQL thực tế).
Do đó, chúng ta có thể sử dụng nó như thế này:
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set_for_object(
OBJECT_ID('sp_BadDogs'),
0);
Kết quả:
+---------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |---------+------------------+--------------------+--------------+-------------+---------| | DogId | NULL | int | 4 | 10 | 0 | | DogName | NULL | nvarchar(255) | 510 | 0 | 0 | | GoodDog | NULL | bit | 1 | 1 | 0 | +---------+------------------+--------------------+--------------+-------------+---------+
Trong trường hợp này, tôi đã sử dụng OBJECT_ID()
chức năng trả về ID của thủ tục đã lưu trữ, điều này giúp tôi không phải biết ID thực.
Xem Cách sys.dm_exec_describe_first_result_set_for_object hoạt động để biết thêm thông tin và ví dụ về chức năng này.