If you have a stored procedure which returns two result sets up till now there was now way to get the meta data easily about the first result set. Let’s take a look what is new in SQL Server Denali, first create this very simple stored procedure.
T-SQL | |
1 2 3 4 5 6 | create procedure prTest as select 1 as a, 'B' as b select 'A' as z, 3 as d Go |
create procedure prTest as select 1 as a, 'B' as b select 'A' as z, 3 as d Go
sys.dm_exec_describe_first_result_set_for_object
Run the following query
T-SQL | |
1 2 | select * from sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('prTest'),1) |
select * from sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('prTest'),1)
Here is partial output
is_hidden | column_ordinal | name | is_nullable | system_type_id | system_type_name | max_length | precision | scale |
---|---|---|---|---|---|---|---|---|
0 | 1 | a | 0 | 56 | int | 4 | 10 | 0 |
0 | 2 | b | 0 | 167 | varchar(1) | 1 | 0 | 0 |
As you can see you get the name, type, precision, length and more about the resultset
sys.dm_exec_describe_first_result_set
This query is more interesting because it will look at a dynamic query. Let’s say your query is the following ‘SELECT * FROM sysobjects SELECT 3’ passed in as a parameter
Here is how that would work
T-SQL | |
1 2 3 4 | declare @n nvarchar(100) = N'SELECT * FROM sysobjects SELECT 3' SELECT * FROM sys.dm_exec_describe_first_result_set(@n, NULL, 1); |
declare @n nvarchar(100) = N'SELECT * FROM sysobjects SELECT 3' SELECT * FROM sys.dm_exec_describe_first_result_set(@n, NULL, 1);
Here is partial output
is_hidden | column_ordinal | name | is_nullable |
system _type_id |
system_type _name |
max_length | precision | scale |
---|---|---|---|---|---|---|---|---|
0 | 1 | name | 0 | 231 | nvarchar(128) | 256 | 0 | 0 |
0 | 2 | id | 0 | 56 | int | 4 | 10 | 0 |
0 | 3 | xtype | 0 | 175 | char(2) | 2 | 0 | 0 |
0 | 4 | uid | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 5 | info | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 6 | status | 1 | 56 | int | 4 | 10 | 0 |
0 | 7 | base_schema_ver | 1 | 56 | int | 4 | 10 | 0 |
0 | 8 | replinfo | 1 | 56 | int | 4 | 10 | 0 |
0 | 9 | parent_obj | 0 | 56 | int | 4 | 10 | 0 |
0 | 10 | crdate | 0 | 61 | datetime | 8 | 23 | 3 |
0 | 11 | ftcatid | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 12 | schema_ver | 1 | 56 | int | 4 | 10 | 0 |
0 | 13 | stats_schema_ver | 1 | 56 | int | 4 | 10 | 0 |
0 | 14 | type | 1 | 175 | char(2) | 2 | 0 | 0 |
0 | 15 | userstat | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 16 | sysstat | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 17 | indexdel | 1 | 52 | smallint | 2 | 5 | 0 |
0 | 18 | refdate | 0 | 61 | datetime | 8 | 23 | 3 |
0 | 19 | version | 1 | 56 | int | 4 | 10 | 0 |
0 | 20 | deltrig | 1 | 56 | int | 4 | 10 | 0 |
0 | 21 | instrig | 1 | 56 | int | 4 | 10 | 0 |
As you can see you get the name, type, precision, length and more about the resultset, this is pretty neat especially for a query stored in a parameter.
When I wrote this post documentation was not yet available, so some of this stuff is written with a lot of guessing.
Click on the SQL Server Denali tag to see all our SQL Server Denali related posts
No comments posted so far