zoukankan      html  css  js  c++  java
  • sql server 存储过程的(包含事务)方法里面,采用游标循环,批量删除(修改)数据

    sqlserver 数据库

    1.下面是完整的 在存储过程中 使用游标进行 循环删除的实例(包括存储过程中,事务的应用)

    2.有问题的话,欢迎随时讨饶我,相信大家看下注释应该就能明白了,很简单的一个,小例子

     1 USE [DBTEST.Test]
     2 GO
     3 
     4 /****** Object:    Script Date: 2020/8/6 15:37:23 ******/
     5 /****** Object:    OptionTableName 存储过程名称(自定义)******/
     6 
     7 DROP PROCEDURE [dbo].[OptionTableName]
     8 GO
     9 
    10 /****** Object:     Script Date: 2020/8/6 15:37:23 ******/
    11 SET ANSI_NULLS ON
    12 GO
    13 
    14 SET QUOTED_IDENTIFIER ON
    15 GO
    16 
    17 
    18 CREATE PROCEDURE [dbo].[OptionTableName]
    19 (
    20   --输入参数
    21   @Id int
    22 )
    23 as
    24 begin
    25     --声明记录 行数
    26     declare @ARow int
    27     --判断输入参数是否有效
    28     if(@Id is not null and @Id <> '' and @Id>0)
    29     begin
    30         --先判断表是否存在
    31         select @ARow = count(1) from Table1 where Id=@Id
    32         if(@ARow>0)
    33         begin
    34             begin
    35                 --如果有错误发生,结束后,系统会自动回滚所有的sql操作
    36                 --xact_abort on 全部回滚操作
    37                set xact_abort on;
    38                begin try
    39                    begin tran
    40                         --逻辑业务 开始
    41                         --游标循环删除 关联@Id记录
    42                         begin
    43                             print('***************************操作开始***********Start****************')
    44                             print('1.记录存在')
    45 
    46                             --删除打包明细表数据
    47                             declare @Ids int
    48                             declare DelTable2_Cursor cursor --定义游标名称
    49                                 for(
    50                                     select c.Id from ShippingmentInfo as c left join ApplyShippingment as d on c.ApplyShippingmentId = d.Id
    51                                     where d.Id= @Id
    52                                 )--查出需要的集合放到游标中
    53                             open DelTable2_Cursor; --打开游标
    54                             --注意此时的读取下一行 需要和上面的for循环里面 得到的列值,一一对应
    55                             fetch next from DelTable2_Cursor into @Ids --读取第一行数据
    56                             while @@FETCH_STATUS = 0
    57                                 begin
    58                                     print('删除Id:'+CONVERT(varchar(500),@Ids)) --打印数据每行的参数数据
    59                                     --获取到每行的 @Ids 数据
    60                                     --需要操作
    61                                     delete Table2 where Id = @Ids
    62                                     fetch next from DelTable2_Cursor into @Ids --读取下一行数据
    63                                 end
    64                             close DelTable2_Cursor; --关闭游标
    65                             deallocate  DelTable2_Cursor; --释放游标
    66                             print('游标循环表数据 删除 结束*************End**************')
    67                         end
    68                    commit tran
    69                end try
    70                begin catch
    71                    --在此可以使用xact_state()来判断是否有不可提交的事务,不可提交的事务
    72                    --表示在事务内部发生错误了。Xact_state()有三种值:-1.事务不可提交;1.事务可提交;0.表示没有事务 此时commit或者rollback会报错。
    73                    if (xact_state()=-1)
    74                     begin
    75                         print('***************************!!!内部出错,事务已经回滚!!!********************End**********************************');
    76                         rollback tran;
    77                     end
    78                end catch
    79             end
    80         end
    81         else begin
    82         print(convert(nvarchar(500),@Id)+',记录不存在')
    83         print('***************************记录不存在***********End****************')
    84         end
    85     end
    86 end
    87 GO
  • 相关阅读:
    闭包函数与装饰器
    函数的嵌套,名称空间以及作用域
    函数知识点整理
    文件处理,光标
    ☆Django☆---表的设计 生命周期 分组 解析 路由层 视图层
    ☆Django☆---注册功能
    ☆Django☆---初步学习
    ☆Django☆---学习Django前的了解 wsgiref jinja2
    ☆javaSctipt☆---基础学习
    ☆前端☆---博客园作业
  • 原文地址:https://www.cnblogs.com/goodluckily/p/13446926.html
Copyright © 2011-2022 走看看