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



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

CREATE TABLE #CustomTable3HTML
(
    ItemId varchar(30),
    ItemId1 varchar(30)
)    
INSERT INTO #CustomTable3HTML
    EXEC SalesDeals.dbo.prGetDealProposalDetail 17100102, 1

但是我收到此错误

Msg 8164,级别 16,状态 1,过程 prGetDealProposalDetail,第 138 行 [批处理起始行 1]
不能嵌套 INSERT EXEC 语句。

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

所以我开始寻找其他选项,并发现了我正在使用的OpenRowSet,

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

运行此 SQL 命令时出现错误

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

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

有解决这个问题的方法。它并不漂亮,但它会起作用。

  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. 执行存储过程后,数据将包含在表中。

最新更新