我正在尝试使用以下查询检索存储过程的列定义:
exec sp_describe_first_result_set @tsql = N'EXEC @return_value = [dbo].[foo]
@DATABASENAME = dbname,
@TABLENAME = tblname,
@DATEFROM = N''20170101'',
@DATETO = N''20170201'''
我收到以下回复:
Msg 11526,Level 16,State 1,Procedure sp_describe_first_result_set,Line 1 无法确定元数据,因为语句' INSERT INTO #Tables(CubeSchema,TableName,DateFilterColumn,SelectColumns)SELECT' Col1'' Col2'在程序' foo'使用临时表
此问题是否有解决方法?
编辑:我无权查看和/或更改存储过程,因此不幸的是,此类解决方案无法正常工作。
答案 0 :(得分:1)
在不改变存储过程的情况下,答案是MAYBE。
您正在使用的选项('sp_describe_first_result_set
')不能使用临时表,因为您使用的是INSERT
语句。
如果您将INSERT
语句更改为SELECT INTO
语句,它可能适用于将数据存储到临时表中,但您仍然无法从中获取数据,因为它不可用。我不确定'sp_describe_first_result_set
'的内部,但看起来它正在使用SET FMTONLY ON
选项,因为临时表会失败。
因此,如果要避免这种情况,请更改存储过程以使用表变量而不是临时表(@table
vs #table
)。
如果您不仅限于SQL Server,并且可以使用编程语言(例如.Net使用ADO.Net)对此进行编程,则可以使用GetSchemaTable
方法ExecuteReader
1}}结果,像这样:
var reader = sqlCommand.ExecuteReader();
var schemaTable = reader.GetSchemaTable();
希望它有所帮助!