我写的sql语句(删除类别,更新编号)

本文分享了一段SQL脚本,用于实现数据表中编号的自动维护,包括删除记录后的编号调整。通过事务确保数据一致性,并讨论了实际项目中可能遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天写了个复杂的sql语句,结果证明不符合项目要求,但是语法值得学习,记下来。

  1. declare @delId int --要删除的行
  2. declare @cid int
  3. set @delId='001002'
  4. begin transaction t1
  5. delete from ttest where 单位编号=@delId
  6.     declare mycur cursor for select id from ttest where convert(int,单位编号)>convert(int,@delId)
  7.     open mycur 
  8.     fetch next from mycur into @cid --类似datareader.Read(),向下移动 
  9.     WHILE (@@FETCH_STATUS = 0 ) --类似datareader.Read() 
  10.     BEGIN                   --在此处理逻辑 
  11.         update ttest set 单位编号='00'+convert(varchar(20),convert(int,单位编号)-1)where id=@cid
  12.         fetch next from mycur into @cid  --开始新一轮循环,少了这个则成死循环 
  13.     END 
  14.     close mycur 
  15.     deallocate mycur 
  16. commit

我的数据表是:ttest

id int                单位编号 varchar(20)

  2                                  001001

  3                                  001002

  4                                  001003

  5                                  001004

  6                                  001005

  7                                  001006

我要实现的业务逻辑是:

如果删除某一行,比如001002

则更新编号大于001002的行,即编号减1

即保持编号整齐。

 

我没有考虑到的问题是,当我更新其他行的时候,其他行关联了很多表。

所以,删除的时候,不能更新其他行。

而是在增加的时候,找到被删除的最小的号,加进去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值