关于主键列执行批量删除单表数据的存储过程,

本文介绍了一个用于批量删除数据库记录的SQL存储过程,通过解析输入参数中的逗号分隔的记录ID,实现单条或多条记录的高效删除操作。详细解释了过程中的关键步骤和代码实现。

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


SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[UP_TY_TXL_XX_Delete_Batch]

 
--ALTER PROCEDURE [dbo].[UP_TY_TXL_XX_Delete_Batch]
@Keys VARCHAR(8000)
AS


DECLARE @sID NVARCHAR(100),@iPos INT
/*获得 [@Keys] 中第一个英文逗号的位置*/
--set @Keys='194DA3ED-32EB-4983-9F0E-487F741EB147,C372B2EC-D199-41B1-83FC-3A1CB8B0204D'测试用的
SET @iPos=CHARINDEX(',',@Keys)
/*如果长度超出范围,则返回过程*/
IF (LEN(@Keys)>0) --RETURN
if @iPos = 0/*如果是单个记录,后面没有英文逗号执行操作*/
DELETE FROM TY_TXL_XX WHERE U_BH=@Keys
    /*如果存在英文逗号*/
    else
        BEGIN
        WHILE 1=1
            BEGIN
            /*得到第一个英文逗号以左的字符串(不包括英文逗号)*/
            SET @sID=LEFT(@Keys,@iPos-1)
            /*改变源字符串【去掉第一个英文逗号以左的字符串(包括英文逗号)】*/
            SET @Keys=STUFF(@Keys,1,@iPos,'')
            /*再次获取新字符串中第一个英文逗号的位置*/
            SET @iPos=CHARINDEX(',',@Keys)
            /*执行删除语句*/
            DELETE FROM TY_TXL_XX WHERE U_BH=@sID
            /*如果没有找到英文逗号,则最后一个被截字符串就是 [@Keys]*/
        IF(@iPos=0)
            BEGIN
            /*执行删除语句*/
            DELETE FROM TY_TXL_XX WHERE U_BH=@Keys
            /*退出循环*/
            BREAK
        END
    END
   
END








-----测试位置
EXEC [dbo].[UP_TY_TXL_XX_Delete_Batch] '79A5BD18-24AC-430C-868F-B3FC40B152D5,9F4CC6E8-E021-435F-81CF-C86ABDC7A8AD,FDD06B01-DD0B-421F-B94E-CB9147A662E7'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值