事务(插入操作)如果执行不成功就删除表里全部的数据
时间:2011-12-08
来源:互联网
(@xh_1 [tinyint],
@ypID_2 [int],
@sl_3 [decimal],
@rkdj_4 [smallmoney],
@xsdj_5 [smallmoney],
@xsje_6 [money])
AS
begin
begin transaction rktd
INSERT INTO [yd].[dbo].[salexm_temp1] ( [xh],[ypID],[sl],[rkdj],[xsdj],[xsje])
VALUES ( @xh_1,@ypID_2,@sl_3,@rkdj_4,@xsdj_5,@xsje_6)
commit transaction rktd
if @@ERROR<>0
delete salexm_temp1
end
如果事务rktd执行不成功,就删除表salexm_temp1里的全部数据,但每次都没起作用?
还有一个问题:
CREATE PROCEDURE [insert_sale]
(@doctorname [varchar](50),@czyname [varchar](50))
AS
BEGIN TRANSACTION tran1
INSERT INTO [yd].[dbo].[sale] ( [doctorname],[czyname])
VALUES ( @doctorname,@czyname)
select SCOPE_IDENTITY( ) AS djh ----这句的作用是把这条记录插入表sale后标识列产生的编号返回,我在前台调用成功
INSERT INTO [yd].[dbo].[salexm_temp1] (xsdjh) VALUES (djh)
return
现在问题是我想将返回的标识列直接在下面的INSERT INTO语句中直接使用。
结果不行,我又想用定义变量a的方法:
declare @a int
set @a=select SCOPE_IDENTITY( )
这样行吗?
作者: oracle185 发布时间: 2011-12-08
方法1:直接写入到sql 中
在存储过程中使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 实现
begin trans
declare @orderDetailsError int,@procuntError int
delete from [order details] where productid=42
select @orderDetailsError =@@error
delete from products where productid=42
select @procuntError=@@error
if(@orderDetailsError =0 and @procuntError=0)
COMMIT TRANS
else
ROLLBACK TRANS
作者: thinkingforever 发布时间: 2011-12-08
CREATE PROCEDURE [insert_salexm_temp1] (@xh_1 [tinyint], @ypID_2 [int], @sl_3 [decimal], @rkdj_4 [smallmoney], @xsdj_5 [smallmoney], @xsje_6 [money]) AS begin begin transaction rktd INSERT INTO [yd].[dbo].[salexm_temp1] ( [xh],[ypID],[sl],[rkdj],[xsdj],[xsje]) VALUES ( @xh_1,@ypID_2,@sl_3,@rkdj_4,@xsdj_5,@xsje_6) if @@ERROR<>0 delete salexm_temp1 else commit transaction rktd end
作者: HEROWANG 发布时间: 2011-12-08
SQL code
CREATE PROCEDURE [insert_salexm_temp1]
(@xh_1 [tinyint],
@ypID_2 [int],
@sl_3 [decimal],
@rkdj_4 [smallmoney],
@xsdj_5 [smallmoney],
@xsje_6 [money])
AS
begin
begin transaction ……

作者: fredrickhu 发布时间: 2011-12-08
SQL code
CREATE PROCEDURE [insert_salexm_temp1]
(@xh_1 [tinyint],
@ypID_2 [int],
@sl_3 [decimal],
@rkdj_4 [smallmoney],
@xsdj_5 [smallmoney],
@xsje_6 [money])
AS
begin
begin transaction rk……
作者: szstephenzhou 发布时间: 2011-12-08
(@doctorname [varchar](50),@czyname [varchar](50))
AS
BEGIN TRANSACTION tran1
declare @i table(id int)
INSERT INTO [yd].[dbo].[sale] ( [doctorname],[czyname])
output inserted.id into @i
VALUES ( @doctorname,@czyname)
从@i 表变量中查刚才的标识值
作者: HEROWANG 发布时间: 2011-12-08
SQL code
CREATE PROCEDURE [insert_salexm_temp1]
(@xh_1 [tinyint],
@ypID_2 [int],
@sl_3 [decimal],
@rkdj_4 [smallmoney],
@xsdj_5 [smallmoney],
@xsje_6 [money])
AS
begin
begin transaction ……
老师,刚才用你的方法试了,故意让第3次插入salexm_temp1的数据出错,前2条还是没有删除。
前台是用VB写的,用for循环调用这个存储过程向salexm_temp1表里插入数据,
当前台本次FOR循环任何一次调用这个存储过程出错都必须将salexm_temp1表里的数据清空。
作者: oracle185 发布时间: 2011-12-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28