表B(编号,姓名,作者顺序)
如:A(101,张三 李四 王五,...)
如何生成:B(101,张三,1)
(101,李四,2)
(101,王五,3)
存储过程可以实现吗?或者其他办法
create table 表A(
编号 int,
参加人 varchar(4000)
)
go
create function dbo.f_GetName(@编号 int)
returns @t table(id int,name varchar(20),num int)
as
begin
declare @参加人 varchar(4000),@i int,@j int
declare @temp varchar(20)
select @参加人='',@j=0,@temp=''
select @参加人=参加人 from 表A where 编号=@编号
set @i=charindex(' ',@参加人)+1
while @i>1
begin
select @j=@j+1,
@temp=left(@参加人,@i-1),
@参加人=substring(@参加人,@i,4000),
@i=charindex(' ',@参加人)+1
insert into @t values(@编号,@temp,@j)
end
if @参加人<> ''
begin
set @j=@j+1
insert into @t values(@编号,@参加人,@j)
end
return
end
go
insert into 表A values(101,'张三 李四 王五')
select * from dbo.f_GetName(101)
drop table 表A
drop function f_GetName
/*
id name num
----------- -------------------- -----------
101 张三 1
101 李四 2
101 王五 3
(所影响的行数为 3 行)
*/