2

我有三个程序 MainProcedure,Procedure1,Procedure2

1) 在 Procedure1 中,我只有一个 select 语句,

2) 在 Procedure2 中,我正在调用 Procedure1 并将输出插入到 #table

3)在主程序中,我正在调用 Procedure2 并尝试将输出插入到引发错误的 #table

消息 8164,级别 16,状态 1,过程 Procedure2,第 10 行 INSERT EXEC 语句不能嵌套。

我可以在需要使用指定服务器名称的地方使用 Openrowset 来解决这个问题,有没有其他方法可以通过不指定服务器名称详细信息来解决这个问题

请查找示例程序以供参考

    Create Proc Procedure1
    As
    Begin
    Select 'Arun' Name, 'Pollachi' Place
    Union
    Select 'Vedaraj' Name, 'Devakottai' Place
    End
    Go



    Create Proc Procedure2
    As
    Begin
    Create Table #Table1
    (
    Name Varchar(50), Place Varchar(50)
    )
    INSERT #Table1
    Exec Procedure1
    SELECT 'Procedure2' [Source], * FROM #Table1

    DROP TABLE #Table1
    End
    Go


    Create Proc MainProcedure
    As
    Begin
    Create Table #Table1
    (
    [Source] Varchar(50), Name Varchar(50), Place Varchar(50)
    )

    INSERT #Table1
    Exec Procedure2

    select * from #Table1

    DROP TABLE #Table1
    End
    Go

任何人都可以更改我的主要程序并使其执行谢谢!

4

1 回答 1

0

就像你说的,openrowset 可以工作,但除此之外,我能想到的唯一方法是:

  1. 将 proc 1 和 proc 2 都更改为基于表的函数
  2. 将 proc 2 更改为 CLR 并将所有逻辑放入其中
  3. 将表格作为表格值参数传递

这里有更多关于这个原因的信息:

https://connect.microsoft.com/SQLServer/feedback/details/294571/improve-insert-exec http://dataeducation.com/revisiting-isnull-coalesce-and-the-perils-of-micro-optimization/

于 2013-05-22T10:12:42.047 回答