SQL Server 存储过程通过多个 ID 更新数据、给存储过程传多个ID

业务场景

客户端提交用逗号分隔多个业务单据ID的字符串到数据库,期待修改这些单据的某些字段信息。

解决方案

数据库中建立表值函数用于将逗号分隔的字符串转为多行的,然后通过where id in(select id from #table)的方式更新

函数

-- =============================================
-- 名称:字符串分隔成表
-- 作者:邢港
-- 日期:2018/08/14
-- 说明:用于将类似'1,2,3,4,5,6'的字符串分解成多行,以便于在存储过程中使用 where id in(select * from StrSplitToTable(@Strs,',') )
-- =============================================
create function [dbo].[StrSplitToTable] 
(
  @Strs varchar(max),   --需要被分隔的字符串
  @Split varchar(50)    --分隔符
)
returns @Temp table (id varchar(50) null)
as

begin
  while (charindex(@Split, @Strs)<>0)
  begin
    insert @Temp(id) values (substring(@Strs, 1, charindex(@Split, @Strs)-1))
    set @Strs=stuff(@Strs, 1, charindex(@Split, @Strs), '')
  end
  insert @Temp(id) values (@Strs)
  return
end

使用

update a set a.isFinish=1 where id in(select * from StrSplitToTable('1,2,3,4,5',','))

20190620092014707.jpg

最后修改:2019 年 06 月 20 日 09 : 22 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论