日期:2014-05-19  浏览次数:20443 次

存储过程入参为数组如何分离并循环?
如题   :例如   入参为   aaa   varchar(500)

值为“1,2,3,4,5”

如何在存储过程中分离这个数组,类似Split   的功能
并循环插入数据库

------解决方案--------------------
declare @aaa varchar(500)

set @aaa= '1,2,3,4,5 '


create table #(
a int
)


declare @sql varchar(8000)
set @sql= 'insert # select ' +replace(@aaa, ', ', ' union all select ')

exec(@sql)

select * from #

drop table #

--结果
a
-----------
1
2
3
4
5

(所影响的行数为 5 行)


------解决方案--------------------
--用个函数来实现

--创建分解函数
create function uf_split
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(id int identity(1,1),istr varchar(8000))
as
begin
declare @i int
declare @splen int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
insert into @retab
values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab values(@str)
return
end
go
--创建存储过程
create proc up_insertdata(
@str1 varchar(500),
@str2 varchar(500))
as
insert into 表(字段1,字段2)
select a.istr,b.istr
from uf_split(@str1, ', ') a
left join (select * from uf_split(@str2, ', ')) b on a.id=b.id
go
--调用
exec up_insertdata '1,2,3,4,5 ', 'A,B,C,D,E '