SQL存储过程如何使用IN关键字

本文介绍如何正确使用SQL的IN子句进行批量记录的删除与更新操作,并提供了一个具体的例子来展示如何通过自定义SQL语句及参数处理来避免数据类型转换错误。

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

我们都知道在进行Delete,Update对多行记录操作时会用到“IN”关键字  
  例如:DELETE   table_name   WHERE   id   IN   (value1,value2,value3,value4)  

 

所以我们需要处理value1,value2,value3,value4型的数据

 

也许很多人会出现选中一条记录时可以完成操作,但当选中多条记录时 会出现数据类型不对的错误

我感觉可能是Delete,Update的语句进行了默认的数据类型转换导致了错误

 

我的方法是自己拼装一个sql语句,用exec执行之

 

另一个可能导致错误的地方是: 没有正确处理value1,value2,value3,value4型数据

 

具体的说: 1. 转换后 数据 变成了 这个样子 value1','value2','value3','value4

              2. 转换后  数据 变成了 这个样子 'value1,value2,value3,value4'

 

我的方法是 用单引号转义符 '' (二个单引号连写) 和 replace (字符串替换函数)

 

ALTER PROCEDURE [dbo].[Modify_Book_By_Category]
    @Ids VARCHAR(100),
    @CategoryId INT
AS
BEGIN
 SET NOCOUNT ON;
 declare @sql VARCHAR(max)
set @sql =
'

UPDATE [BookShop].[dbo].[Books]
   SET
      [CategoryId] = '+CONVERT(varchar(50),@CategoryId)+'
 WHERE [Id]  IN  ('''+replace(@Ids,',',''',''')+''')

'
 --print @sql
 EXEC(@sql)
END

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值