SQL SERVER INSERT EXEC嵌套问题解决方案
来源:互联网 发布:js 遇见未来下载 编辑:程序博客网 时间:2024/06/05 23:06
INSERT EXEC嵌套问题
--第一个存储过程_TestA
ALTER PROCEDURE[dbo].[_TestA] @SNNVARCHAR(50)= NULL
AS
SET NOCOUNT ON;
BEGIN
CREATE TABLE#Detail
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
);
INSERT INTO#Detail
SELECT @SN ,
'' ,
'';
SELECT *
FROM #Detail;
END;
--第二个存储过程_TestB
ALTER PROCEDURE[dbo].[_TestB]
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE#Detail1
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
);
INSERT INTO#Detail1
EXEC [dbo].[_TestA]@SN= '021VQR2SEA053122';
SELECT *
FROM #Detail1;
END;
系统很多 这样的_TestB 嵌套调用_TestA的数据,都没有问题.
但是随着系统扩展,出现了第二次嵌套
--第三个存储过程_TestC
ALTER PROCEDURE[dbo].[_TestC]
AS
SET NOCOUNT ON;
BEGIN
CREATE TABLE#Detail2
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
);
INSERT INTO#Detail2
EXEC [dbo].[_TestB];
SELECT *
FROM #Detail2;
END;
这种状况下,就会报错
Msg 8164, Level 16, State1, Procedure _TestB, Line 30
An INSERT EXEC statementcannot be nested.
解决方案:
http://stackoverflow.com/questions/3795263/errors-insert-exec-statement-cannot-be-nested-and-cannot-use-the-rollback-s
http://www.sommarskog.se/share_data.html
简单来说就是把第一层_TestA改成表值函数
--select * from[dbo].[UFT_TestA]('021VQR2SEA053122')
ALTER FUNCTION [dbo].[UFT_TestA]
(
@SN NVARCHAR(50)= NULL
)
RETURNS
@Detail TABLE
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
)
AS
BEGIN
INSERT INTO @Detail
SELECT @SN ,
'' ,
'';
--可进行一些业务操作
update @Detail
set oem_sn='222'
where sn=@SN
RETURN
END
--第二个存储过程_TestB 引用函数
ALTER PROCEDURE[dbo].[_TestB]
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE#Detail1
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
);
INSERT INTO#Detail1
select * from [dbo].[UFT_TestA]('021VQR2SEA053122')
;
SELECT *
FROM #Detail1;
END;
--第三个存储过程_TestC不变
ALTER PROCEDURE[dbo].[_TestC]
AS
SET NOCOUNT ON;
BEGIN
CREATE TABLE#Detail2
(
sn VARCHAR(50),
oem_sn VARCHAR(50),
Product_Name VARCHAR(200)
);
INSERT INTO#Detail2
EXEC [dbo].[_TestB];
SELECT *
FROM #Detail2;
END;
- SQL SERVER INSERT EXEC嵌套问题解决方案
- SQL Server 存储过程嵌套处理 错误提示:INSERT EXEC 语句不能嵌套
- SQL Server 2000安装问题解决方案
- 还原sql server 2008 数据库问题解决方案
- INSERT EXEC PROC不能嵌套的解决方法
- ScrollView嵌套ViewPager问题解决方案
- ScrollView嵌套ViewPager问题解决方案
- ScrollView嵌套ListView问题解决方案
- ScrollView嵌套ViewPager问题解决方案
- Sql Server 系统配置的WMI配置问题解决方案
- sql server中like无法匹配下划线问题解决方案
- SQL Server 2008 安装过程中出现问题解决方案
- 常见excel导入到SQL Server 问题解决方案
- 转: INSERT EXEC PROC不能嵌套的解决方法
- INSERT EXEC 语句不能嵌套 原因说明和 解决办法
- Sql Server 事务嵌套
- Sql Server 2005 与Sql Server Mobile(Sql server 2005 mobile Edition)数据同步步骤以及问题解决方案
- Sql Server 2005 与Sql Server Mobile(Sql server 2005 mobile Edition)数据同步步骤以及问题解决方案
- CodeForces - 338C Divisor Tree 【贪心】
- 深入分析Java序列化与反序列化
- java讲义经验之谈(二)抽象类与抽象方法
- Linux中的shell
- iOS_获取app版本号
- SQL SERVER INSERT EXEC嵌套问题解决方案
- 从今天开始
- 表单清空方法 JQuery
- UGUI 文本下划线实现
- Android中获取状态栏高度的方法
- HDU[2167]Pebbles题解
- 当Pokemon GO VR化时,我们能体验到怎样的“精灵世界”?
- windows下php安装redis
- maven中添加本地jar