如何向sql server存储过程传递一个数组

最近写一段程序 要求向存储过程传递一个字符串数组或者集合 然后通过not in进行条件判断

仔细研究后在csdn上找到了解决该问题的办法帖出来给大家共享一下

大致方法是利用传递长字符串的形式向存储过程传递一个长字符串。由于sqlserver没有 splite函数

所以必须自己定义一个splite函数来进行处理

 

自定义一个函数
create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(F1 varchar(100))
as
begin
 declare @i int
 set @SourceSql=rtrim(ltrim(@SourceSql))
 set @i=charindex(@StrSeprate,@SourceSql)
 while @i>=1
 begin
  insert @temp values(left(@SourceSql,@i-1))
  set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
  set @i=charindex(@StrSeprate,@SourceSql)
 end
 if @SourceSql<>''
    insert @temp values(@SourceSql)
 return
end
-执行
select * from dbo.f_splitstr('1,2,3,4',',')

 

注:'1,2,3,4'即你所传递的字符串

同样你可以通过 select cunt(*) from dbo.f_splitstr('1,2,3,4',',')

获得该字符串数组的长度

如果要删除该函数使用

--删除函数
drop function fsplit

*************************************************************************

还有另外一种方法,这是充分利用了SQL Server强大的字符串功能

不过由于用到了exec命令,所以只能在存储过程中实现

create procedure f_splitstr (@SourceSql varchar(8000),@StrSeprate varchar(10))
as

create table #temp (F1 varchar(100))
declare @TmpSql varchar(8000)

select @TmpSql = 'insert into #temp values ('+ replace (@SourceSql,@StrSeprate,')
insert into #temp values (')+')'

exec(@TmpSql)

select * from #temp

drop table #temp
go

f_splitstr4 '1,2,3,4',','

结果是一样的 .

 

 

 

 

1

2

3

4

5

6

7

8

8

9

9

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值