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

Cách sys.dm_exec_describe_first_result_set_for_object hoạt động trong SQL Server

Trong SQL Server, sys.dm_exec_describe_first_result_set_for_object chức năng quản lý động trả về siêu dữ liệu của tập kết quả đầu tiên cho một mô-đun nhất định.

Nó cần một @object_id dưới dạng một tham số và mô tả siêu dữ liệu kết quả đầu tiên cho mô-đun có ID đó.

Nó sử dụng cùng một thuật toán với sp_describe_first_result_set hệ thống lưu trữ thủ tục và sys.dm_exec_describe_first_result_set và thực hiện khá nhiều điều tương tự, ngoại trừ việc nó chỉ giới hạn ở các thủ tục và trình kích hoạt được lưu trữ.

Nếu bạn chuyển ID của một loại đối tượng khác (chẳng hạn như dạng xem, hàm, bảng, v.v.) thì nó sẽ trả về lỗi.

Cú pháp

Cú pháp như sau:

sys.dm_exec_describe_first_result_set_for_object   
    ( @object_id , @include_browse_information )

Ở đâu @object_id là ID của thủ tục hoặc trình kích hoạt được lưu trữ và @include_browse_information cho phép bạn sử dụng chế độ duyệt như thể có FOR BROWSE tùy chọn trên truy vấn.

Ví dụ

Đây là một ví dụ để chứng minh.

Trong ví dụ này, tôi sử dụng OBJECT_ID() hàm trả về ID của thủ tục đã lưu trữ (giúp tôi không phải biết ID thực).

SELECT * 
FROM sys.dm_exec_describe_first_result_set_for_object(
    OBJECT_ID('spAlbumsFromArtist'),
    0
);

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   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
|-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
| 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            | NULL              | NULL            | NULL           | NULL            | 0                    | NULL                    | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 0           | 2                | ReleaseDate | 0             | 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                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Hàm này trả về rất nhiều cột. Xem tài liệu của Microsoft để biết đầy đủ về từng cột.

Đây lại là hàng đầu tiên, nhưng sử dụng đầ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              | 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
error_number                 | NULL
error_severity               | NULL
error_state                  | NULL
error_message                | NULL
error_type                   | NULL
error_type_desc              | NULL

Lưu ý rằng source_server , source_database , source_schema , source_tablesource_column các cột là NULL . Chúng sẽ không phải là NULL trong hai ví dụ tiếp theo.

Chế độ duyệt

Trong ví dụ trước, tôi đã sử dụng 0 cho đối số thứ hai. Bạn có thể đặt giá trị này thành 0 , 1 hoặc 2 .

Dưới đây là ý nghĩa của mỗi giá trị:

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.

Chúng tôi đã biết điều gì sẽ xảy ra khi nó được đặt thành 0 . Vì vậy, trong hai ví dụ tiếp theo, tôi sẽ đặt nó thành 12 tương ứng.

Tôi nên chỉ ra rằng tài liệu của Microsoft tuyên bố rằng đối số này là loại bit và chỉ đề cập đến hai giá trị có thể có:01 . Tuy nhiên, tôi đã kiểm tra chức năng này trong cả SQL Server 2017 và SQL Server 2019 và nó thực sự là một tinyint .

Ngoài ra, tài liệu cho sp_describe_first_result_set thủ tục được lưu trữ chỉ định rõ ràng rằng đối số này là tinyint và rằng nó chấp nhận ba giá trị được đề cập ở trên.

Ngoài ra, tài liệu cho sys.dm_exec_describe_first_result_set_for_object nói rằng nó sử dụng cùng một thuật toán với sp_describe_first_result_set .

Trong mọi trường hợp, các ví dụ trong bài viết này bao gồm cả ba giá trị.

@include_browse_information = 1

Trong ví dụ này, tôi đặt @include_browse_information thành 1 .

SELECT * 
FROM sys.dm_exec_describe_first_result_set_for_object(
    OBJECT_ID('spAlbumsFromArtist'),
    1
);

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   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
|-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
| 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                          | Homer           | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 0           | 2                | ReleaseDate | 0             | 40               | date               | 3            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | ReleaseDate     | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 3                | AlbumId     | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | AlbumId         | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 4                | ArtistId    | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Artists        | ArtistId        | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Lần này trả về bốn hàng, đại diện cho bốn cột từ các bảng bên dưới.

Hãy tách cột đầu tiên một lần nữa bằng cách sử dụng đầu ra dọc, giống như chúng ta đã làm trong ví dụ trướ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                | Homer
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
error_number                 | NULL
error_severity               | NULL
error_state                  | NULL
error_message                | NULL
error_type                   | NULL
error_type_desc              | NULL

Lần này là source_server , source_database , source_schema , source_tablesource_column cột không còn NULL .

Trong trường hợp này, các cột đó phản ánh máy chủ, cơ sở dữ liệu, lược đồ, bảng và cột cơ bản của truy vấn trong quy trình được lưu trữ.

Để chứng minh ý tôi, đây là định nghĩa thủ tục được lưu trữ thực tế:

CREATE PROCEDURE [dbo].[spAlbumsFromArtist] 
	@ArtistName varchar(255)
AS
	SELECT AlbumName, ReleaseDate
	FROM Homer.Music.dbo.Albums al
		INNER JOIN Homer.Music.dbo.Artists ar
		ON al.ArtistId = ar.ArtistId 
	WHERE ar.ArtistName = @ArtistName;
GO

Thủ tục được lưu trữ sử dụng cách đặt tên bốn phần để tham chiếu đến một máy chủ được liên kết có tên là “Homer”, cũng như cơ sở dữ liệu, lược đồ, bảng và cột từ máy chủ từ xa. Dữ liệu này khớp với dữ liệu được trả về bởi sys.dm_exec_describe_first_result_set_for_object chức năng.

@include_browse_information = 2

Trong ví dụ này, tôi đặt @include_browse_information thành 2 .

SELECT * 
FROM sys.dm_exec_describe_first_result_set_for_object(
    OBJECT_ID('spAlbumsFromArtist'),
    2
);

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   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
|-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
| 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                          | Homer           | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 0           | 2                | ReleaseDate | 0             | 40               | date               | 3            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | ReleaseDate     | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
| 1           | 3                | 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                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Lần này chỉ có ba hàng được trả về, đại diện cho ba cột, bao gồm ROWSTAT cột.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách OBJECTPROPERTYEX () hoạt động trong SQL Server

  2. Chèn các ký tự vào giữa chuỗi trong SQL Server (T-SQL)

  3. Cách chuyển đổi giữa các định dạng ngày trong SQL Server bằng CAST ()

  4. SQL Server tương đương với CHẾ ĐỘ XEM TẠO HOẶC THAY THẾ của Oracle

  5. Làm cách nào để bạn sao chép bản ghi trong bảng SQL nhưng hoán đổi id duy nhất của hàng mới?