菜鸟请教存储过程该怎么写
sql 数据库中有这么一张用户表
User_ID User_Name
1 张三
2 李四
3 李红
用其他地方(比如excel)通过转换获得这么两个字符串
Field_name = "姓名,性别,年龄 "
Values = "张三,男,12;李四,男,33;李红,女,22; "
想通过存储过程用以下格式写入数据库中
字段名: a b User_ID
张三 姓名 1
男 性别 1
12 年龄 1
李四 姓名 2
男 性别 2
33 年龄 2
李红 姓名 3
女 性别 3
22 年龄 3
要如何做呢
------解决方案--------------------create function uf_splitstring
(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @retab table(a varchar(100),b varchar(100),user_id int)
as
begin
declare @i int
declare @splen int
declare @user_id int
select @splen=len(@spli),@i=charindex(@spli,@str)
while @i > 0
begin
select @user_id =user_id from 用户表 where user_name=left(@str,@i-1)
insert into @retab(a,b,user_id)
values(left(@str,@i-1),case when datalength(left(@str,@i-1))> 2 then '姓名 ' when left(@str,@i-1) in ( '男 ', '女 ') then '性别 ' else '年龄 ' end,@user_id)
select @str=substring(@str,@i+@splen,8000)
select @i=charindex(@spli,@str)
end
if @str <> ' ' insert into @retab(a) values(@str)
return
end
declare @values varchar(8000)
--将分号,全角逗号替换为半角逗号
select @Values = replace(replace( '张三,男,12;李四,男,33;李红,女,22; ', '; ', ', '), ', ', ', ')
--结果输出
select * from uf_splitstring(@Values, ', ')
------解决方案--------------------create procedure sp_test(@str varchar(1000))
as
begin
create table #t(id int identity(1,1),name varchar(8),sex varchar(8),age varchar(8))
declare @t table(a varchar(10),b varchar(10),User_ID int)
declare @tmp varchar(1000)
while charindex( '; ',@str)> 0
begin
select
@tmp=left( @str,charindex( '; ',@str)-1) ,
@str=stuff(@str,1,charindex( '; ',@str), ' ')
set @tmp= 'insert into #t(name,sex,age) select ' ' '+replace(@tmp, ', ', ' ' ', ' ' ')+ ' ' ' '
exec(@tmp)
end
insert into @t
select name, '姓名 ' as b,id from #t union select sex, '性别 ',id from #t union select age