首页 文章

检索使用临时表的存储过程结果集的列定义

提问于
浏览
0

我试图使用以下查询检索存储过程的列定义:

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 回答

  • 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 方法,如下所示:

    var reader = sqlCommand.ExecuteReader();
    var schemaTable = reader.GetSchemaTable();
    

    希望能帮助到你!

相关问题