sql - 无法从存储过程将数据插入临时表

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

我一直在尝试从存储过程(GetData)获取数据插入临时表然后进行过滤。但无法使其正常工作并收到错误消息

An INSERT EXEC statement cannot be nested.

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

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

Invalid use of a side-effecting operator 'INSERT EXEC' within a function.

因此,我一直在努力寻找一个可以使其正常工作的解决方案。其他存储过程无法修改,因为程序中几乎很多地方都使用了该存储过程。

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

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

然后收到以下错误消息

An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.

最佳答案

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

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

How to Share Data between Stored Procedures

关于sql - 无法从存储过程将数据插入临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44581366/

相关文章:

c# - 更新查询返回 -1 值,即使数据已在数据库中更新

sql - 在 Windows 中将 .sql 文件重定向到 .db 文件

sql-server - 有没有办法组合这些查询?

sql-server - SP_SEND_DBMAIL @QUERY 在电子邮件中插入换行符

对引用其他列的列进行 SQL 检查约束

c# - Mono c# 的存储过程?

mysql - 如何在mysql存储过程中声明变量?

MYSQL SUM 与内部选择返回最大日期

mysql - 如何重写 ON 子句以避免使用 OR

sql - 如何将插入的输出值分配给sql server中的变量?