存储过程里怎么循环插入多条记录?
我的思路是这样,但是有错误,不知道怎么截断字符串,然后循环保存
CREATE PROCEDURE test@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
set @DepartmentID ='1,2,3,4,5'
set @DepartmentName ='a,b,c,d,e'
while @i<=@len
insert into test(strid,strname) values(@str2,@str1)
set @i=@i+1
end
test 表结构是
strid,strname
1 a
2 b
3 c
4 d
5 e
我的思路是这样,但是有错误,不知道怎么截断字符串,然后循环保存
CREATE PROCEDURE test@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
set @DepartmentID ='1,2,3,4,5'
set @DepartmentName ='a,b,c,d,e'
while @i<=@len
insert into test(strid,strname) values(@str2,@str1)
set @i=@i+1
end
test 表结构是
strid,strname
1 a
2 b
3 c
4 d
5 e
CREATE PROCEDURE test
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
--一下两句不是必须的,从逻辑上说,应该是调用存储过程时传入的参数
--set @DepartmentID='1,2,3,4,5'
--set @DepartmentName='a,b,c,d,e'
set @len=100
while @i<=@len
begin
insert into test(strid,strname) values(@str2,@str1)
set @i=@i+1
loop
CREATE PROCEDURE test
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
--一下两句不是必须的,从逻辑上说,应该是调用存储过程时传入的参数
--set @DepartmentID='1,2,3,4,5'
--set @DepartmentName='a,b,c,d,e'
DECLARE @str1 varchar(100)
DECLARE @str2 varchar(100)
DECLARE @len int set @len=100
while @i<=@len
begin
set @str1='abcdefg'
set @str2='1234567'
insert into test(strid,strname) values(@str2,@str1)
set @i=@i+1
loop
set @DepartmentIDfirst=left(@DepartmentID,1)
set @DepartmentNamefirst=left(@DepartmentName,1)
insert into ....................
set DepartmentID=stuff(@DepartmentID,charindex(@DepartmentIDfirst,@DepartmentID),2,'')
set DepartmentName= stuff(@DepartmentName,charindex(@DepartmentNamefirst,@DepartmentName),2,'') 循环下
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
set nocount on
declare @str1 varchar(50),@str2 varchar(50)
declare @test table(strid varchar(50),strname varchar(50))while charindex(',',@DepartmentID)>0
begin
set @str1=left(@DepartmentName,charindex(',',@DepartmentName)-1)
set @str2=left(@DepartmentID,charindex(',',@DepartmentID)-1)
set @DepartmentName=stuff(@DepartmentName,1,charindex(',',@DepartmentName),'')
set @DepartmentID=stuff(@DepartmentID,1,charindex(',',@DepartmentID),'')
insert @test(strid,strname) values(@str2,@str1)
end
if @DepartmentID<>''
insert @test(strid,strname) values(@DepartmentID,@DepartmentName)
select * from @testgo
exec test '1,2,3,4,5' ,'a,b,c,d,e'
--result
/*strid strname
-------------------------------------------------- --------------------------------------------------
1 a
2 b
3 c
4 d
5 e*/
CREATE PROCEDURE testp
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
declare @str1 nvarchar(500), @str2 nvarchar(500)
--前提@DepartmentID和@DepartmentName里面的数量是同样多的。
set @DepartmentID =@DepartmentID+','
set @DepartmentName =@DepartmentName+','
while(charindex(',',@DepartmentID)>0)
begin
set @str2=substring(@DepartmentID,1,charindex(',',@DepartmentID)-1)
set @DepartmentID=substring(@DepartmentID,charindex(',',@DepartmentID)+1,len(@DepartmentID))
set @str1=substring(@DepartmentName,1,charindex(',',@DepartmentName)-1)
set @DepartmentName=substring(@DepartmentName,charindex(',',@DepartmentName)+1,len(@DepartmentName))
insert into test0(strid,strname) values(@str2,@str1)
end
exec testp '1,2,3,4,5','a,b,c,d,e'select * from test0
CREATE PROCEDURE test
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
Begin DECLARE @str1 varchar(100)
DECLARE @str2 varchar(100)
DECLARE @len int,@i int,@j int
set @i=0
set @len=0
set @j=1
set @len=len(replace(@departmentid,',','')) while (@i<=@len and @j<=(2*@len-1))
begin
set @str1=substring(@departmentid,@j,1)
set @str2=substring(@DepartmentName,@j,1)
insert into test(strid,strname) values(@str1,@str2)
set @i=@i+1
set @j=@j+2
endEnd
@DepartmentID nvarchar(500),
@DepartmentName nvarchar(500)
as
begin
declare @str1 varchar(10),@str2 varchar(10),@len int
while charindex(',',@departmentid)>0 and charindex(',',@DepartmentName)>0
begin
select @str1=left(@departmentid,charindex(',',@departmentid)-1),@str2=left(@DepartmentName,charindex(',',@DepartmentName)-1)
insert into #test (strid,strname) values(@str1,@str2)
select @departmentid=substring(@departmentid,charindex(',',@departmentid)+1,len(@departmentid)), @DepartmentName=substring(@DepartmentName,charindex(',',@DepartmentName)+1,len(@DepartmentName))
end
select * from #test
endexec #p_test '1,2,3,4,5','a,b,c,d,e'strid strname
---------- ----------
1 a
2 b
3 c
4 d