Trong SQL Server, sp_describe_first_result_set
hệ thống lưu trữ thủ tục trả về siêu dữ liệu cho một tập hợp kết quả.
Cụ thể hơn, nó trả về siêu dữ liệu cho tập kết quả đầu tiên có thể có của một lô T-SQL.
Nó chấp nhận ba tham số, tham số đầu tiên là / các câu lệnh T-SQL mà bạn đang phân tích.
Ví dụ
Đây là một ví dụ để chứng minh.
EXEC sp_describe_first_result_set
@tsql = N'SELECT * FROM Artists',
@params = null,
@browse_information_mode = 0;
Mã đó đặt tên rõ ràng cho từng tham số trong số ba tham số mà thủ tục được lưu trữ này chấp nhận.
Chỉ tham số đầu tiên là bắt buộc. Ngoài ra, như với bất kỳ thủ tục được lưu trữ nào, bạn có thể bỏ qua tên tham số nếu muốn.
Vì vậy, chúng tôi cũng có thể sử dụng mã sau:
EXEC sp_describe_first_result_set N'SELECT * FROM Artists';
Và đây là kết quả:
+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+ | is_hidden | column_ordinal | name | is_nullable | system_type_id | system_type_name | max_length | precision | scale | collation_name | user_type_id | user_type_database | user_type_schema | user_type_name | assembly_qualified_type_name | xml_collection_id | xml_collection_database | xml_collection_schema | xml_collection_name | is_xml_document | is_case_sensitive | is_fixed_length_clr_type | source_server | source_database | source_schema | source_table | source_column | is_identity_column | is_part_of_unique_key | is_updateable | is_computed_column | is_sparse_column_set | ordinal_in_order_by_list | order_by_is_descending | order_by_list_length | tds_type_id | tds_length | tds_collation_id | tds_collation_sort_id | |-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------| | 0 | 1 | ArtistId | 0 | 56 | int | 4 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | NULL | NULL | NULL | NULL | 1 | NULL | 0 | 0 | 0 | NULL | NULL | NULL | 56 | 4 | NULL | NULL | | 0 | 2 | ArtistName | 0 | 231 | nvarchar(255) | 510 | 0 | 0 | SQL_Latin1_General_CP1_CI_AS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | NULL | NULL | NULL | NULL | 0 | NULL | 1 | 0 | 0 | NULL | NULL | NULL | 231 | 510 | 13632521 | 52 | | 0 | 3 | ActiveFrom | 1 | 40 | date | 3 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | NULL | NULL | NULL | NULL | 0 | NULL | 1 | 0 | 0 | NULL | NULL | NULL | 40 | 3 | NULL | NULL | +-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+
Có rất nhiều cột được trả về với quy trình được lưu trữ này (xem tài liệu của Microsoft để biết giải thích về từng cột), vì vậy có thể bạn sẽ cần cuộn sang bên để xem tất cả chúng.
Tôi sẽ chuyển sang đầu ra theo chiều dọc trong một số ví dụ tiếp theo, trong trường hợp bạn gặp sự cố khi cuộn sang ngang.
Chế độ duyệt
Đối số thứ ba - @browse_information_mode
- chỉ định xem các cột chính bổ sung và thông tin bảng nguồn có được trả về hay không.
Các giá trị sau được chấp nhận cho đối số này:
Giá trị | Kết quả |
---|---|
0 | Không có thông tin nào được trả lại. |
1 | Mỗi truy vấn được phân tích như thể nó bao gồm một FOR BROWSE tùy chọn trên truy vấn. Thao tác này sẽ trả về tên bảng cơ sở dưới dạng thông tin cột nguồn. |
2 | Mỗi truy vấn được phân tích như thể nó sẽ được sử dụng để chuẩn bị hoặc thực thi một con trỏ. Thao tác này sẽ trả về tên chế độ xem dưới dạng thông tin cột nguồn. |
Dưới đây là các ví dụ minh họa cách mỗi giá trị này ảnh hưởng đến kết quả.
Để làm cho mọi thứ ngắn gọn hơn, tôi sẽ sửa đổi câu lệnh T-SQL của mình để chỉ trả về một cột. Tôi cũng sẽ hiển thị kết quả bằng cách sử dụng đầu ra dọc để giúp bạn không phải cuộn sang ngang.
@browse_information_mode = 0
Trong ví dụ này, tôi đặt @browse_information_mode
thành 0
.
EXEC sp_describe_first_result_set
@tsql = N'SELECT AlbumName FROM vAlbums',
@params = null,
@browse_information_mode = 0;
Như đã đề cập trước đó, bạn có thể bỏ qua các tên tham số nếu muốn. Do đó, chúng tôi có thể sử dụng đoạn mã sau như một cách ngắn gọn hơn để làm điều tương tự.
EXEC sp_describe_first_result_set N'SELECT AlbumName FROM vAlbums', null, 0;
Kết quả (sử dụng đầu ra dọc):
is_hidden | 0 column_ordinal | 1 name | AlbumName is_nullable | 0 system_type_id | 231 system_type_name | nvarchar(255) max_length | 510 precision | 0 scale | 0 collation_name | SQL_Latin1_General_CP1_CI_AS user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 1 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 231 tds_length | 510 tds_collation_id | 13632521 tds_collation_sort_id | 52
Lưu ý rằng khá nhiều cột là NULL
. Đặc biệt, hãy lưu ý rằng source_database
, source_schema
, source_table
và source_column
các cột là NULL
.
Các cột này sẽ không phải là NULL
trong hai ví dụ tiếp theo, nhưng chúng sẽ tạo ra hai kết quả khác nhau.
@browse_information_mode = 1
Trong ví dụ này, tôi đặt @browse_information_mode
thành 1
.
EXEC sp_describe_first_result_set
N'SELECT AlbumName FROM vAlbums', null, 1;
Cài đặt @browse_information_mode
thành 1
trả về kết quả như thể nó bao gồm FOR BROWSE
tùy chọn trên truy vấn.
Trong trường hợp của chúng tôi, điều này dẫn đến bốn hàng được trả về (đại diện cho bốn cột từ các bảng cơ sở).
Đây là bốn hàng được trả về:
+-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+ | is_hidden | column_ordinal | name | is_nullable | system_type_id | system_type_name | max_length | precision | scale | collation_name | user_type_id | user_type_database | user_type_schema | user_type_name | assembly_qualified_type_name | xml_collection_id | xml_collection_database | xml_collection_schema | xml_collection_name | is_xml_document | is_case_sensitive | is_fixed_length_clr_type | source_server | source_database | source_schema | source_table | source_column | is_identity_column | is_part_of_unique_key | is_updateable | is_computed_column | is_sparse_column_set | ordinal_in_order_by_list | order_by_is_descending | order_by_list_length | tds_type_id | tds_length | tds_collation_id | tds_collation_sort_id | |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------| | 0 | 1 | AlbumName | 0 | 231 | nvarchar(255) | 510 | 0 | 0 | SQL_Latin1_General_CP1_CI_AS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | Music | dbo | Albums | AlbumName | 0 | 0 | 1 | 0 | 0 | NULL | NULL | NULL | 231 | 510 | 13632521 | 52 | | 1 | 2 | ArtistId | 0 | 56 | int | 4 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | Music | dbo | Artists | ArtistId | 1 | 1 | 0 | 0 | 0 | NULL | NULL | NULL | 56 | 4 | NULL | NULL | | 1 | 3 | AlbumId | 0 | 56 | int | 4 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | Music | dbo | Albums | AlbumId | 1 | 1 | 0 | 0 | 0 | NULL | NULL | NULL | 56 | 4 | NULL | NULL | | 1 | 4 | GenreId | 0 | 56 | int | 4 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | Music | dbo | Genres | GenreId | 1 | 1 | 0 | 0 | 0 | NULL | NULL | NULL | 56 | 4 | NULL | NULL | +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+
Vì vậy, mặc dù tôi chỉ chỉ định một cột trong truy vấn T-SQL mà tôi đã chuyển cho thủ tục, nó trả về thông tin cho bốn cột. Đây là bốn cột được tham chiếu bởi vAlbums
xem.
Hãy tập trung vào chỉ một cột bằng cách sử dụng đầu ra dọc:
is_hidden | 0 column_ordinal | 1 name | AlbumName is_nullable | 0 system_type_id | 231 system_type_name | nvarchar(255) max_length | 510 precision | 0 scale | 0 collation_name | SQL_Latin1_General_CP1_CI_AS user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | Music source_schema | dbo source_table | Albums source_column | AlbumName is_identity_column | 0 is_part_of_unique_key | 0 is_updateable | 1 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 231 tds_length | 510 tds_collation_id | 13632521 tds_collation_sort_id | 52
Lưu ý rằng source_database
, source_schema
, source_table
và source_column
cột không còn NULL
. Chúng cung cấp thông tin về các đối tượng cơ sở được chế độ xem truy vấn.
Ngược lại, khi chúng tôi đặt @browse_information_mode
thành 2
trong ví dụ tiếp theo, chúng tôi sẽ nhận được các cột thực tế trong chế độ xem.
Cũng lưu ý rằng source_server
cột vẫn là NULL
. Điều này là do máy chủ cục bộ là máy chủ gốc. Nhưng nếu chế độ xem của tôi đang truy vấn các bảng trên một máy chủ được liên kết, thì tên của máy chủ đó sẽ nằm trong source_server
cột.
Xem Cách sys.dm_exec_describe_first_result_set Hoạt động để làm ví dụ. Trong bài viết đó, tôi sử dụng một chế độ xem tương tự như trong ví dụ trên, ngoại trừ việc nó truy vấn cơ sở dữ liệu trên một máy chủ được liên kết.
@browse_information_mode = 2
Cuối cùng, hãy đặt @browse_information_mode
thành 2
.
EXEC sp_describe_first_result_set
N'SELECT AlbumName FROM vAlbums', null, 2;
Trong trường hợp này, truy vấn được phân tích như thể nó sẽ được sử dụng để chuẩn bị hoặc thực thi một con trỏ.
Lần này, chỉ có hai hàng được trả lại:
+-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+ | is_hidden | column_ordinal | name | is_nullable | system_type_id | system_type_name | max_length | precision | scale | collation_name | user_type_id | user_type_database | user_type_schema | user_type_name | assembly_qualified_type_name | xml_collection_id | xml_collection_database | xml_collection_schema | xml_collection_name | is_xml_document | is_case_sensitive | is_fixed_length_clr_type | source_server | source_database | source_schema | source_table | source_column | is_identity_column | is_part_of_unique_key | is_updateable | is_computed_column | is_sparse_column_set | ordinal_in_order_by_list | order_by_is_descending | order_by_list_length | tds_type_id | tds_length | tds_collation_id | tds_collation_sort_id | |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------| | 0 | 1 | AlbumName | 0 | 231 | nvarchar(255) | 510 | 0 | 0 | SQL_Latin1_General_CP1_CI_AS | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | Music | dbo | vAlbums | AlbumName | 0 | 0 | 1 | 0 | 0 | NULL | NULL | NULL | 231 | 510 | 13632521 | 52 | | 1 | 2 | ROWSTAT^@ | 0 | 56 | int | 4 | 10 | 0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | NULL | NULL | NULL | NULL | NULL | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL | 56 | 4 | NULL | NULL | +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+
Và để giúp bạn không phải cuộn sang ngang, đây là hàng đầu tiên trong đầu ra theo chiều dọc:
is_hidden | 0 column_ordinal | 1 name | AlbumName is_nullable | 0 system_type_id | 231 system_type_name | nvarchar(255) max_length | 510 precision | 0 scale | 0 collation_name | SQL_Latin1_General_CP1_CI_AS user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | Music source_schema | dbo source_table | vAlbums source_column | AlbumName is_identity_column | 0 is_part_of_unique_key | 0 is_updateable | 1 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 231 tds_length | 510 tds_collation_id | 13632521 tds_collation_sort_id | 52
Trong ví dụ này, source_table
cột chứa tên chế độ xem thực tế, chứ không phải là bảng cơ sở.
@params
Đối số
Cho đến nay, chúng tôi đã không sử dụng @params
, ngoại trừ việc đặt nó thành NULL
.
Nếu lô SQL mà bạn đang phân tích có chứa các tham số, hãy sử dụng @params
hàm khai báo các tham số đó.
Điều này hoạt động tương tự như cách bạn khai báo các tham số khi sử dụng sp_executesql
thủ tục.
Dưới đây là một ví dụ khai báo một tham số với @params
đối số.
EXEC sp_describe_first_result_set
@tsql = N'SELECT AlbumName FROM Albums WHERE ArtistId = @ArtistId',
@params = N'@ArtistId int',
@browse_information_mode = 0;
Kết quả (sử dụng đầu ra dọc):
is_hidden | 0 column_ordinal | 1 name | AlbumName is_nullable | 0 system_type_id | 231 system_type_name | nvarchar(255) max_length | 510 precision | 0 scale | 0 collation_name | SQL_Latin1_General_CP1_CI_AS user_type_id | NULL user_type_database | NULL user_type_schema | NULL user_type_name | NULL assembly_qualified_type_name | NULL xml_collection_id | NULL xml_collection_database | NULL xml_collection_schema | NULL xml_collection_name | NULL is_xml_document | 0 is_case_sensitive | 0 is_fixed_length_clr_type | 0 source_server | NULL source_database | NULL source_schema | NULL source_table | NULL source_column | NULL is_identity_column | 0 is_part_of_unique_key | NULL is_updateable | 1 is_computed_column | 0 is_sparse_column_set | 0 ordinal_in_order_by_list | NULL order_by_is_descending | NULL order_by_list_length | NULL tds_type_id | 231 tds_length | 510 tds_collation_id | 13632521 tds_collation_sort_id | 52