将存储过程数据插入SQL Server中的临时表中

时间:2017-10-31 17:13:11

标签: sql-server sql-server-2008

我正在尝试将存储过程的数据插入到临时表中,如下所示

CREATE TABLE #CustomTable3HTML
(
    ItemId varchar(30),
    ItemId1 varchar(30)
)    

INSERT INTO #CustomTable3HTML
    EXEC SalesDeals.dbo.prGetDealProposalDetail 17100102, 1

但我收到此错误

  

Msg 8164,Level 16,State 1,Procedure prGetDealProposalDetail,138行[Batch Start Line 1]
  无法嵌套INSERT EXEC语句。

我认为这是因为存储过程已经定义了一个insert into子句,我发现它只能在调用链中使用一次。

所以我开始寻找其他选项并找到我正在使用的OpenRowSet,如下所示

 SELECT * 
 INTO #CustomTable3HTML      
 FROM OPENROWSET('SQLOLEDB','Server=Demo\Demo;Trusted_Connection=Yes;Database=SalesDeals',
      'SET NOCOUNT ON;SET FMTONLY OFF;EXEC SalesDeals.dbo.prGetDealProposalDetail 17100102,1')

运行此SQL命令时出现错误

  

拒绝访问远程服务器,因为不存在登录映射。

当我使用像sysadmin这样的更高级别的帐户但是在我正在运行此SQL的数据库上使用另一个帐户时,它正常工作。

1 个答案:

答案 0 :(得分:0)

有解决方法。它不漂亮,但它会起作用。

  1. 在我们的外部查询中定义一个表:

    CREATE TABLE #CustomTable3HTML
    (
         ItemId varchar(30),
         ItemId1 varchar(30)
    ) 
    
  2. 更改最后添加以下代码的过程:

    IF OBJECT_ID('tempdb..#CustomTable3HTML')
         BEGIN
              INSERT INTO #CustomTable3HTML
              SELECT ....
         END
    ELSE
         BEGIN
              SELECT ....
         END
    
  3. 执行存储过程后,您将获得表中的数据。