写过程时碰到这么一个问题,需要在库里处理N条数据,不想在程序里循环造成多次访问数据库
而SQL Sever又不支持数组参数,尝试了两种方法,在此做笔记如下(省略了单条数据的处理,用#temp是为了显示结果)
1.利用replace
SQL SERVER “数组参数”_数组_02create table #temp
SQL SERVER “数组参数”_数组_02(
SQL SERVER “数组参数”_数组_02ss varchar(
200) not null
SQL SERVER “数组参数”_数组_02)
SQL SERVER “数组参数”_数组_02declare @str varchar(
200)
SQL SERVER “数组参数”_数组_02declare @result varchar(
1000)
SQL SERVER “数组参数”_数组_02
set @str='aaa,bb,c,d,e,ffffff'
SQL SERVER “数组参数”_数组_02
set @result =' insert into #temp(ss) select '''+replace(@str,',','''union select''')+''''
SQL SERVER “数组参数”_数组_02exec(@result)
SQL SERVER “数组参数”_数组_02select 
* from #temp
2.利用charindex和substring
SQL SERVER “数组参数”_数组_02create table #temp
SQL SERVER “数组参数”_数组_02(
SQL SERVER “数组参数”_数组_02ss varchar(
200) not null
SQL SERVER “数组参数”_数组_02)
SQL SERVER “数组参数”_数组_02declare @str varchar(
200)
SQL SERVER “数组参数”_数组_02declare @curr 
int
SQL SERVER “数组参数”_数组_02declare @prev 
int
SQL SERVER “数组参数”_数组_02
set @str='aaa,bb,c,d,e,ffffff'
SQL SERVER “数组参数”_数组_02
set @curr=1
SQL SERVER “数组参数”_数组_02
set @prev=1
SQL SERVER “数组参数”_数组_02
while  @prev < len(@str)
SQL SERVER “数组参数”_数组_02begin
SQL SERVER “数组参数”_数组_02
set @curr=charindex(',',@str,@prev)
SQL SERVER “数组参数”_数组_02
if @curr>@prev
SQL SERVER “数组参数”_数组_02insert #temp select substring(@str,@prev,@curr
-@prev)   
SQL SERVER “数组参数”_数组_02
else
SQL SERVER “数组参数”_数组_02begin
SQL SERVER “数组参数”_数组_02insert  #temp select substring(@str,@prev,len(@str)
-@prev+1)
SQL SERVER “数组参数”_数组_02
break
SQL SERVER “数组参数”_数组_02end
SQL SERVER “数组参数”_数组_02
set @prev=@curr+1
SQL SERVER “数组参数”_数组_02end
SQL SERVER “数组参数”_数组_02select 
* from #temp