首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >TSQL:确定存储过程返回的列数

TSQL:确定存储过程返回的列数
EN

Stack Overflow用户
提问于 2012-07-24 02:53:20
回答 4查看 2.1K关注 0票数 3

这个问题以前可能有人问过,但我找不到一个令人满意的答案。

我需要将存储过程的结果插入到一个临时表中,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
INSERT INTO #TEMP EXEC MY_SP

我事先不知道SP将返回多少列,因此我需要准备我的#TEMP表(通过dynamic ALTER ..添加命令)添加列以匹配SP结果集。

假设- SP不接受任何参数,并且列数始终相同。但是,我如何在SP之外的纯TSQL中确定这个数字,这样我就可以将它存储到变量中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-26 22:19:31

一个困难的问题,特别是当其他人拒绝你运行OPENROWSET的必要权限时。

您是否考虑过对SP进行解包/编写脚本,并将其内容直接添加到T-SQL中?通过这种方式,您可以随心所欲地修改和调整它。

否则,如果您可以解释有关SP的更多信息:

  • SP做什么?
  • 它输出什么类型的信息?1-N列,-多少行?
  • 是慢/快?(我们是否可以使用蛮力的try-catch方法)?
  • 它如何确定要输出的列,以及更改的频率?
  • 你能以任何方式预先确定列吗?(以便您可以使用INSERT #temp EXEC sp_getData语法)。

祝你好运!

票数 2
EN

Stack Overflow用户

发布于 2012-07-24 03:03:44

这有点尴尬,但你可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * INTO #temp 
FROM OPENROWSET('SQLOLEDB','Data Source=MyServer;Trusted_Connection=yes;Integrated Security=SSPI', 'EXECUTE MyDB.MySchema.MyProcedure @MyParm=123')

我使用了requested EXECUTE INTO语法,比如SELECT INTO,以避免事先知道存储的proc输出的形状,但它被拒绝了

票数 2
EN

Stack Overflow用户

发布于 2012-07-29 04:48:21

让我从一开始就说,如果我必须这样做,我会尝试在SQL环境或其他环境之外找到一种方法,因为我提供的解决方案不是实现这一点的好方法,但它是有效的。所以我并不是说这是个好主意。我有一个名为test的sp:

代码语言:javascript
代码运行次数:0
运行
复制
CREATE PROCEDURE Test
AS
SELECT 1 as One, 2 as Two

为了动态地执行此操作,我执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
DECLARE @i int
SET @i = 1;
DECLARE @SUCESS bit 
SET @SUCESS = 0
WHILE(@SUCESS = 0)
BEGIN 
  DECLARE @proc VARCHAR(MAX)
  DECLARE @count int
  SET @count = 1
  SET @proc = 'DECLARE @t TABLE ( c1 varchar(max) '
  WHILE @count < @i 
  BEGIN 
    SET @proc = @proc + ', c' + CONVERT(varchar, @count + 1) + ' varchar(max) '
    print @proc 
    SET @count = @count + 1
  END
  SET @proc = @proc + '); INSERT INTO @t EXEC Test'
  BEGIN TRY
    EXEC(@proc);
    SET @SUCESS = 1
  END TRY
  BEGIN CATCH
    SET @i = @i+1
  END CATCH

END

SET @proc = @proc + '; SELECT * into ##t FROM @t '
EXEC( @proc )

SELECT * from ##t

对于您的问题,这是一个糟糕的解决方案,因为您已经丢失了列的数据类型、列的名称等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11618634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档