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 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据的更多相关文章

  1. SQL Server 存储过程,带事务的存储过程(创建存储过程,删除存储过程,修改存储过

    存储过程 创建存储过程 use pubs --pubs为数据库 go create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程 ...

  2. sql server 存储过程中,调用事务 tran

      Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran来使用事务. begin tran表示开始事务, commit tran表示 ...

  3. SQL SERVER存储过程中使用事务

    存储过程格式: CREATE PROCEDURE YourProcedure AS BEGIN SET NOCOUNT ON; BEGIN TRY---------------------开始捕捉异常 ...

  4. SQL SERVER存储过程中使用事务与捕获异常

    https://www.douban.com/note/559596669/ 格式类似于 CREATE PROCEDURE YourProcedure ASBEGIN    SET NOCOUNT O ...

  5. sql 在存储过程中使用事务(转)

    本来想自己写一下,后来发现这个写的比我理解的要好,所以直接拽过来了,链接地址:https://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737 ...

  6. SQL server分页的四种方法

    SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路  先取前20页, ...

  7. SQL Server存储过程的删除方法

    SQL Server存储过程的删除方法使我们经常会用到的,下面就为您介绍扩展存储过程的删除方法,如果您对SQL Server存储过程方面感兴趣的话,不妨一看. --清除SQL Server所有的危险扩 ...

  8. sql server 存储过程 output 和return的使用 方法,详解

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  9. 需要我们了解的SQL Server阻塞原因与解决方法

    需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连 ...

随机推荐

  1. 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比

    https://zhuanlan.zhihu.com/p/57861350 计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度.总体的范围发生动态变化时,如何 ...

  2. .net core微服务——gRPC(下)

    序 上一篇博客把grpc的概念说了个大概,介绍了proto的数据类型,基本语法,也写了个小demo,是不是没那么难? 今天要从理论到实际,写两个微服务,并利用grpc完成两者之间的通信.只是作为dem ...

  3. Apache Kylin v3.1.0 重点功能推介

    Apache Kylin v3.1.0 已于上周正式发布,其中包含了许多值得一试的新功能,本文选择了 Presto 查询下压引擎.Flink 构建引擎.Kylin on Kubernetes 解决方案 ...

  4. vue 应用 : 计数器组件

    <template> <div class="input-number"> <div @click="sub" :class=&q ...

  5. STL源码剖析:仿函数

    仿函数就是函数对象 函数对象: 重载了operator()的类对象 使用起来和普通函数一致,所以称为函数对象或是仿函数 STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义 一 ...

  6. Vuex里的module选项和移动端布局

    Vuex里的modules 在store文件夹里创建一个modules的文件夹,里面随意创建一个.js文件,然后export输出

  7. 【mysql】- 索引使用篇

    回顾 每个索引都对应一棵B+树,B+树分为好多层,最下边一层是叶子节点,其余的是内节点.所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点. InnoDB 存储引擎会自动为主键(如果没 ...

  8. Vue nextTick 学习历程

    nextTick 详解 这是官网的解释,比较简洁精炼,反正我是第一遍什么都没看懂 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 经过我一步步测试 ...

  9. Jarvisoj-web Login

    题目入口: http://web.jarvisoj.com:32772/ 有个登陆框,随便提交参数然后bp抓包 get到了一个Hint,给了sql查询的语句 select * from `admin` ...

  10. apache配置Directory目录权限的一些配置

    可以使用<Directory 目录路径>和</Directory>这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体 的设置目录权限语句 ...