我试图使用以下查询检索存储过程的列定义:
exec sp_describe_first_result_set @tsql = N'EXEC @return_value = [dbo].[foo]
@DATABASENAME = dbname,
@TABLENAME = tblname,
@DATEFROM = N''20170101'',
@DATETO = N''20170201'''
我收到以下回复:
消息11526,级别16,状态1,过程sp_describe_first_result_set,第1行无法确定元数据,因为语句'INSERT INTO #Tables(CubeSchema,TableName,DateFilterColumn,SelectColumns)在过程'foo'中选择'Col1','Col2'使用临时表
这个问题有解决方法吗?
编辑:我没有查看和/或更改存储过程的权限,所以不幸的是,这种解决方案不起作用 .
1 回答
在不改变存储过程的情况下,答案是MAYBE .
您正在使用的选项('
sp_describe_first_result_set
')不能使用临时表,因为您使用的是INSERT
语句 . 如果您将INSERT
语句更改为SELECT INTO
语句,它可能适用于将数据存储到临时表中,但您仍然无法使用.2509701_t . 我不确定'sp_describe_first_result_set
'的内部,但看起来它正在使用SET FMTONLY ON
选项,因为临时表会失败 .因此,如果要避免这种情况,请更改存储过程以使用表变量而不是临时表(
@table
vs#table
) .如果您不仅限于SQL Server,并且可以使用编程语言(例如.Net使用ADO.Net)编写程序,则可以使用
ExecuteReader
结果的GetSchemaTable
方法,如下所示:希望能帮助到你!