SQL Server中存储过程中使用IN遇到的问题

来源:互联网 发布:java spring mvc 框架 编辑:程序博客网 时间:2024/06/05 17:37
存储过程传in里面的参数的解决办法
两种方法:
1:charindex(','+ltrim(列名)+',',','+@s+',')>0 @s传进来的字符变量如31,32,33 
2:exec('@sql')  动态执行组合的@sql串



我们都知道在进行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


0 0