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性能 五种角度其一“阻塞与死锁” 这里通过连 ...
随机推荐
- Python之爬虫(十六) Scrapy框架中选择器的用法
Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中选择节点的语言,也可以用在HTM ...
- vue : 无法加载文件 C:\Users\ui61895076\AppData\Roaming\npm\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
说白了就是这个编辑器不能用罢了 执行以下代码 1.鼠标右击以管理员身份运行vscode; 2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 3. 执行: ...
- webpack源码-依赖收集
webpack源码-依赖收集 version:3.12.0 程序主要流程: 触发make钩子 Compilation.js 执行EntryOptionPlugin 中注册的make钩子 执行compi ...
- Netty 学习笔记(2) ------ 数据传输载体ByteBuf
Netty中读写以ByteBuf为载体进行交互 ByteBuf的结构 ByteBuf以readerIndex和writerIndex划分为三块区域,废弃字节,可读字节,可写字节.每次从ByteBuf读 ...
- vue 修改路由
直接放代码: this.$router.push({ path: "/login" });
- Mybatis(一)Mybatis简介与入门程序
Mybatis简介: MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建 ...
- VS Code 上那些沙雕插件
本文整理自网络,作者不详,如有侵权,则可删除. VS Code 作为前端最牛逼的一个前端编辑器,可以说是最流行的开发工具了,以其可支持扩展程序(通过安装扩展程序,VS Code 可以支持更多新的语言. ...
- Learning in the Frequency Domain 解读
论文:Learning in the Frequency Domain, CVPR 2020 代码:https://github.com/calmevtime/DCTNet 实际的图像尺寸比较大,无法 ...
- 用友U8API 8.9-15.0接口开发前提,选好开发方式
在用友接口开发这条路上,走走停停过了好几年.对于如何选择哪种方式,目前总结几点, 对于开发,目前可以实现的有三种方式 一.是通过用友官方提供的(EAI/API)接口 这种方式的优点 ...
- c++ string 类型 大小写转换
还是用以前的库函数就行的,toupper(int c)小写变大写和tolower(int c)大写变小写 可以直接这么干 string s = "ABCDEFG"; for( in ...