存储过程入参为数组如何分离并循环?
如题 :例如 入参为 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 '