我正在尝试将存储过程的数据插入到如下所示的临时表中
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 的数据库上的普通数据库所有者,它工作正常。
有解决这个问题的方法。它并不漂亮,但它会起作用。
-
在我们的外部查询中定义一个表:
CREATE TABLE #CustomTable3HTML ( ItemId varchar(30), ItemId1 varchar(30) )
-
更改过程,在末尾添加以下代码:
IF OBJECT_ID('tempdb..#CustomTable3HTML') BEGIN INSERT INTO #CustomTable3HTML SELECT .... END ELSE BEGIN SELECT .... END
-
执行存储过程后,数据将包含在表中。