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