无法从存储过程

时间:2017-06-16 05:20:59

标签: sql sql-server stored-procedures sql-server-2012

我一直在尝试从存储过程(GetData)中获取数据插入到临时表中然后进行过滤。但是无法让这个工作并收到错误信息

  

无法嵌套INSERT EXEC语句。

存储过程(GetData)有一个在其中调用的存储过程。

我尝试使用存储过程脚本创建一个函数,但我无法执行此操作并收到错误消息

  

无效使用副作用操作符' INSERT EXEC'在一个   功能

因此一直试图找到一个解决方案,我可以让它工作。其他商店程序无法在程序中的几乎所有地方使用。

顺便说一下,我无法共享存储过程脚本。

DECLARE @FromDate datetime
DECLARE @ToDate datetime
DECLARE @List VARCHAR(Max)
DECLARE @Filter VARCHAR(Max)

SET @FromDate = '1 July 2016 ';
SET @ToDate = '30 December 2017';
SET @List = '1,2,3,4';
SET @Filter= 'Manager, Staff'


DECLARE @Temp_Stage_Measurement TABLE
 (
 ClientID int,
 Status varchar(255),
 Declining varchar(255), Eligible varchar(255),
 NotEligible varchar(255), Reapplying varchar(255)
 )

INSERT @Temp_Measurement EXEC GetData @FromDate,@ToDate, @List  
--Get a error message "An INSERT EXEC statement cannot be nested." as GetData has another
--INSERT EXEC which inturn calls other store procedure which cannot be modified as used in almost many places in the program

SELECT * FROM @Temp_Measurement 
 WHERE @Filter is null or Reason IN (@Filter)

甚至尝试更换以下声明: INSERT @Temp_Measurement EXEC GetData @FromDate,@ToDate, @List

使用SELECT * INTO #Temp_Measurement EXEC GetData @FromDate,@ToDate, @List

然后收到以下错误消息

  

对象或列名称缺失或为空。对于SELECT INTO   声明,验证每列是否有名称。对于其他陈述,请查看   对于空别名。别名定义为""或[]是不允许的。   将别名更改为有效名称。

1 个答案:

答案 0 :(得分:2)

我确信您在Insert.. EXEC程序中有GetData声明。 Insert.. EXEC不能嵌套,这是Sql Server中的限制。

请查看以下文章,了解Erland Sommarskog在程序之间共享数据的各种方法

How to Share Data between Stored Procedures