INSERT EXEC语句不能嵌套

时间:2013-05-22 09:51:36

标签: sql sql-server sql-server-2008 tsql

我有三个程序MainProcedure,Procedure1,Procedure2

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

2)在Procedure2中调用Procedure1并将Output插入#table

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

Msg 8164,Level 16,State 1,Procedure Procedure2,Line 10 INSERT EXEC语句不能嵌套。

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

请查找样本程序以供参考

    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

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

1 个答案:

答案 0 :(得分:0)

就像你说的那样,openrowset会起作用,但除此之外,我能想到的唯一方法是:

  1. 将proc 1和proc 2更改为基于表格的函数
  2. 将proc 2更改为CLR并将所有逻辑放在那里
  3. 将表格作为表格值参数传递
  4. 有关于此原因的更多信息:

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