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

Tìm hiểu kiểu dữ liệu của các cột được trả về trong tập kết quả trong SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Máy chủ SQL đã chặn quyền truy cập vào thủ tục 'sys.sp_OACreate' của thành phần 'Quy trình tự động hóa Ole'

  2. Cách hiển thị truy vấn và kết quả trong tab riêng biệt trong SQL Server Management Studio (SSMS) - Hướng dẫn sử dụng SQL Server / TSQL Phần 15

  3. Tablix:Lặp lại các hàng tiêu đề trên mỗi trang không hoạt động - Trình tạo Báo cáo 3.0

  4. Cách CẬP NHẬT từ CHỌN trong SQL Server

  5. SQL Server (TSQL) - Có thể thực thi các câu lệnh song song không?