欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MSSQL 将多个id传给存储过程实现 where id in (@ids)

程序员文章站 2024-03-21 21:17:46
...

业务场景

sql server 开发中有时我们需要将多个id做为一个参数传给存储过程,然后期望存储过程中能像这样进行多个id的查询 where id in (1,2,3),而事实上id=1,2,3是通过一个字符串变量传递进来的@ids='1,2,3',这样是不支持直接将@ids放到in后面的。

解决方案

用动态sql是一种方式,这里提供另一种方式,自定义用户函数将字符串的多个id拆分到一个表中。

1. 创建函数

-- =============================================
-- 名称:字符串分隔成表
-- 维护:ifu25
-- 日期: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

2. 使用示例

declare @xx varchar(50)
set @xx='1,2,3'
select * from biz_bill where id in(select * from [dbo].[StrSplitToTable] (@xx,','))
相关标签: MSSQL