sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据
sqlserver 数据库
1.下面是完整的 在存储过程中 使用游标进行 循环删除的实例(包括存储过程中,事务的应用)
2.有问题的话,欢迎随时讨饶我,相信大家看下注释应该就能明白了,很简单的一个,小例子
USE [DBTEST.Test]
GO /****** Object: Script Date: 2020/8/6 15:37:23 ******/
/****** Object: OptionTableName 存储过程名称(自定义)******/ DROP PROCEDURE [dbo].[OptionTableName]
GO /****** Object: Script Date: 2020/8/6 15:37:23 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE PROCEDURE [dbo].[OptionTableName]
(
--输入参数
@Id int
)
as
begin
--声明记录 行数
declare @ARow int
--判断输入参数是否有效
if(@Id is not null and @Id <> '' and @Id>)
begin
--先判断表是否存在
select @ARow = count() from Table1 where Id=@Id
if(@ARow>)
begin
begin
--如果有错误发生,结束后,系统会自动回滚所有的sql操作
--xact_abort on 全部回滚操作
set xact_abort on;
begin try
begin tran
--逻辑业务 开始
--游标循环删除 关联@Id记录
begin
print('***************************操作开始***********Start****************')
print('1.记录存在') --删除打包明细表数据
declare @Ids int
declare DelTable2_Cursor cursor --定义游标名称
for(
select c.Id from ShippingmentInfo as c left join ApplyShippingment as d on c.ApplyShippingmentId = d.Id
where d.Id= @Id
)--查出需要的集合放到游标中
open DelTable2_Cursor; --打开游标
--注意此时的读取下一行 需要和上面的for循环里面 得到的列值,一一对应
fetch next from DelTable2_Cursor into @Ids --读取第一行数据
while @@FETCH_STATUS =
begin
print('删除Id:'+CONVERT(varchar(),@Ids)) --打印数据每行的参数数据
--获取到每行的 @Ids 数据
--需要操作
delete Table2 where Id = @Ids
fetch next from DelTable2_Cursor into @Ids --读取下一行数据
end
close DelTable2_Cursor; --关闭游标
deallocate DelTable2_Cursor; --释放游标
print('游标循环表数据 删除 结束*************End**************')
end
commit tran
end try
begin catch
--在此可以使用xact_state()来判断是否有不可提交的事务,不可提交的事务
--表示在事务内部发生错误了。Xact_state()有三种值:-.事务不可提交;.事务可提交;.表示没有事务 此时commit或者rollback会报错。
if (xact_state()=-)
begin
print('***************************!!!内部出错,事务已经回滚!!!********************End**********************************');
rollback tran;
end
end catch
end
end
else begin
print(convert(nvarchar(),@Id)+',记录不存在')
print('***************************记录不存在***********End****************')
end
end
end
GO
sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据的更多相关文章
- SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过
存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...
- sql server 存储过程中,调用事务 tran
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务. begin tran表示开始事务, commit tran表示 ...
- SQL SERVER存储过程中使用事务
存储过程格式: CREATE PROCEDURE YourProcedure AS BEGIN SET NOCOUNT ON; BEGIN TRY---------------------开始捕捉异常 ...
- SQL SERVER存储过程中使用事务与捕获异常
https://www.douban.com/note/559596669/ 格式类似于 CREATE PROCEDURE YourProcedure ASBEGIN SET NOCOUNT O ...
- sql 在存储过程中使用事务(转)
本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...
- SQL server分页的四种方法
SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路 先取前20页, ...
- SQL Server存储过程的删除方法
SQL Server存储过程的删除方法使我们经常会用到的,下面就为您介绍扩展存储过程的删除方法,如果您对SQL Server存储过程方面感兴趣的话,不妨一看. --清除SQL Server所有的危险扩 ...
- sql server 存储过程 output 和return的使用 方法,详解
SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...
- 需要我们了解的SQL Server阻塞原因与解决方法
需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连 ...
随机推荐
- IOS中input键盘事件keyup 的兼容解决办法
用input监听键盘keyup事件,在安卓手机浏览器中是可以的,但是在ios手机浏览器中很慢,用输入法输入之后,并未立刻相应keyup事件. 解决办法: 在ios设备上可以用html5的input事件 ...
- JavaWeb基础(day14_css)
css css样式种类 内部样式 在head标签中使用 <style>标签 行内样式 直接在标签中写style属性进行赋值,style属性的就相当于内部样式的{} 外部样式 单独写一个文件 ...
- 【RPA Starter第一课】 Uipath RPA Starter Course
今天开始学习Uipath学院上面的课程,准备考下高级开发认证. 官网全部都是英文,然后自己一步一步的翻译,解读.开始第一步. 考纲里有写这需要学习哪些课程.自己按着上面来, 第一门课: RPA Sta ...
- Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区
Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...
- Mesos+Zookeeper+Marathon+Docker环境搭建
相关理论请参考:https://www.cnblogs.com/Bourbon-tian/p/7155054.html,本文基于https://www.cnblogs.com/Bourbon-tian ...
- Jquery如何使用动画效果改变背景色
Jquery如何使用动画效果改变背景色 一.问题引入 jquery的animate动画虽然强大,但是无法使用其进行背景色(background-color)的动画效果变化,因为animate动画效果只 ...
- javascript : 点击按钮,把某标签中的内容复制到剪贴板
需求如题. 静态页面如下. 需要的库:jquery(不用应该也能做). 浏览器:PC chrome 68 Mobile MIUI9.5(Android 7) <p>1.用电脑打开网址:&l ...
- 多国正在遭遇新型勒索病毒Petya侵袭
北京时间2017年6月27日晚,据外媒消息,多国正在遭遇 Petya 勒索病毒袭击,政府.银行.电力系统.通讯系统.企业以及机场都受到不同程度影响.请予关注,并做相应防范.相关事件描述及防范措施如下: ...
- PyQt5主界面
QMainWindow QMainWindow控件继承之QWidget控件,QWidget是所有控件的父类,主要提供界面的基本功能,包括边框.标题.工具栏.关闭按钮.最小化按钮以及最大化按钮等.子类中 ...
- 高效C++:定制new和delete
内存的申请和释放,C++从语言级别提供了new和delete关键字,因此需要了解和熟悉其中的过程. 了解new-handler的行为 set_new_handler可以指定一个函数,当申请内存失败时调 ...