如何 select 来自或存储 sp_describe_first_result_set 的结果
How to select from or store result of sp_describe_first_result_set
当我们在 SQL 服务器中调用存储过程 sp_describe_first_result_set
时,它会向我们显示描述所传递查询内容的行 return。
是否可以对这个结果进行操作?例如,它的 select 列,存储在一个变量中,等等 - 似乎存储过程本身只是 return 正常的代码(0 或 1),但没有输出,那么我唯一的选择是重新创建它吗?它在内部做了什么来产生结果?
例如:
EXEC @result = sp_describe_first_result_set @tsql= N'SELECT * FROM MyTable'
PRINT('status code only, not the schema :( :( :( = ' + @result)
这是 Azure Synapse Analytics 的无服务器 SQL 池部分,因此 dm_exec_describe_first_result_set
不受支持。
免责声明:我在 Synapse SQL 团队工作。
您可以使用下面的代码将结果集 sp_describe_first_result_set 填充到临时 table #t。想法是用与 SP returns 相同的列创建 temp table 然后使用 INSERT INTO
CREATE TABLE #t (
is_hidden bit NOT NULL,
column_ordinal int NOT NULL,
name sysname NULL,
is_nullable bit NOT NULL,
system_type_id int NOT NULL,
system_type_name nvarchar(256) NULL,
max_length smallint NOT NULL,
precision tinyint NOT NULL,
scale tinyint NOT NULL,
collation_name sysname NULL,
user_type_id int NULL,
user_type_database sysname NULL,
user_type_schema sysname NULL,
user_type_name sysname NULL,
assembly_qualified_type_name nvarchar(4000),
xml_collection_id int NULL,
xml_collection_database sysname NULL,
xml_collection_schema sysname NULL,
xml_collection_name sysname NULL,
is_xml_document bit NOT NULL,
is_case_sensitive bit NOT NULL,
is_fixed_length_clr_type bit NOT NULL,
source_server nvarchar(128),
source_database nvarchar(128),
source_schema nvarchar(128),
source_table nvarchar(128),
source_column nvarchar(128),
is_identity_column bit NULL,
is_part_of_unique_key bit NULL,
is_updateable bit NULL,
is_computed_column bit NULL,
is_sparse_column_set bit NULL,
ordinal_in_order_by_list smallint NULL,
order_by_list_length smallint NULL,
order_by_is_descending smallint NULL,
tds_type_id int NOT NULL,
tds_length int NOT NULL,
tds_collation_id int NULL,
tds_collation_sort_id tinyint NULL
)
GO
INSERT INTO #t EXEC sp_describe_first_result_set N'
SELECT
*
FROM OPENROWSET(
BULK ''https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv'',
FORMAT = ''CSV'',
PARSER_VERSION = ''2.0'') as [r]'
SELECT * FROM #t
当我们在 SQL 服务器中调用存储过程 sp_describe_first_result_set
时,它会向我们显示描述所传递查询内容的行 return。
是否可以对这个结果进行操作?例如,它的 select 列,存储在一个变量中,等等 - 似乎存储过程本身只是 return 正常的代码(0 或 1),但没有输出,那么我唯一的选择是重新创建它吗?它在内部做了什么来产生结果?
例如:
EXEC @result = sp_describe_first_result_set @tsql= N'SELECT * FROM MyTable'
PRINT('status code only, not the schema :( :( :( = ' + @result)
这是 Azure Synapse Analytics 的无服务器 SQL 池部分,因此 dm_exec_describe_first_result_set
不受支持。
免责声明:我在 Synapse SQL 团队工作。
您可以使用下面的代码将结果集 sp_describe_first_result_set 填充到临时 table #t。想法是用与 SP returns 相同的列创建 temp table 然后使用 INSERT INTO
CREATE TABLE #t (
is_hidden bit NOT NULL,
column_ordinal int NOT NULL,
name sysname NULL,
is_nullable bit NOT NULL,
system_type_id int NOT NULL,
system_type_name nvarchar(256) NULL,
max_length smallint NOT NULL,
precision tinyint NOT NULL,
scale tinyint NOT NULL,
collation_name sysname NULL,
user_type_id int NULL,
user_type_database sysname NULL,
user_type_schema sysname NULL,
user_type_name sysname NULL,
assembly_qualified_type_name nvarchar(4000),
xml_collection_id int NULL,
xml_collection_database sysname NULL,
xml_collection_schema sysname NULL,
xml_collection_name sysname NULL,
is_xml_document bit NOT NULL,
is_case_sensitive bit NOT NULL,
is_fixed_length_clr_type bit NOT NULL,
source_server nvarchar(128),
source_database nvarchar(128),
source_schema nvarchar(128),
source_table nvarchar(128),
source_column nvarchar(128),
is_identity_column bit NULL,
is_part_of_unique_key bit NULL,
is_updateable bit NULL,
is_computed_column bit NULL,
is_sparse_column_set bit NULL,
ordinal_in_order_by_list smallint NULL,
order_by_list_length smallint NULL,
order_by_is_descending smallint NULL,
tds_type_id int NOT NULL,
tds_length int NOT NULL,
tds_collation_id int NULL,
tds_collation_sort_id tinyint NULL
)
GO
INSERT INTO #t EXEC sp_describe_first_result_set N'
SELECT
*
FROM OPENROWSET(
BULK ''https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.csv'',
FORMAT = ''CSV'',
PARSER_VERSION = ''2.0'') as [r]'
SELECT * FROM #t