传递参数:
站点名称、站点简称、站点全拼,都是以‘-’分割连接,如:新区分公司-工业园二号门-生活中心-行创四路-行创三路-工业园一号门,
xqfgs-gyyehm-shzx-xcsl-xcsl-gyyyhm,
xinqufengongsi-gongyeyuanerhaomen-shenghuozhongxin-xingchuangsilu-xingchuangsanlu-gongyeyuanyihaomen要求:如果表中存在同名的站点名称 则这条不插入,如已经存在 新区分公司 则对应 新区分公司、xqfgs、xinqufengongsi 三列不插入表
简拼和全拼可以重名然后根据这三个参数以‘-’分割然后插入表中表中对应三列:zname、jp、qp 效果:zname jp qp
新区分公司 xqfgs xinqufengongsi
工业园二号门 gyyehm gongyeyuanerhaomen
.
.
.
站点名称、站点简称、站点全拼,都是以‘-’分割连接,如:新区分公司-工业园二号门-生活中心-行创四路-行创三路-工业园一号门,
xqfgs-gyyehm-shzx-xcsl-xcsl-gyyyhm,
xinqufengongsi-gongyeyuanerhaomen-shenghuozhongxin-xingchuangsilu-xingchuangsanlu-gongyeyuanyihaomen要求:如果表中存在同名的站点名称 则这条不插入,如已经存在 新区分公司 则对应 新区分公司、xqfgs、xinqufengongsi 三列不插入表
简拼和全拼可以重名然后根据这三个参数以‘-’分割然后插入表中表中对应三列:zname、jp、qp 效果:zname jp qp
新区分公司 xqfgs xinqufengongsi
工业园二号门 gyyehm gongyeyuanerhaomen
.
.
.
if object_id('[tb]') is not null drop table [tb]
create table [tb]([zname] varchar(20),[jp] varchar(20),[qp] varchar(20))--存储过程
create proc dbo.getpart @zname varchar(8000),@jp varchar(8000),@qp varchar(8000)
as
begin
declare @col1 table(id int identity(1,1),zname varchar(20))
insert into @col1
select substring(@zname,number,charindex('-',@zname+'-',number)-number)
from master..spt_values
where type='p'
and substring('-'+@zname,number,1)='-' declare @col2 table(id int identity(1,1),jp varchar(20))
insert into @col2
select substring(@jp,number,charindex('-',@jp+'-',number)-number)
from master..spt_values
where type='p'
and substring('-'+@jp,number,1)='-' declare @col3 table(id int identity(1,1),qp varchar(20))
insert into @col3
select substring(@qp,number,charindex('-',@qp+'-',number)-number)
from master..spt_values
where type='p'
and substring('-'+@qp,number,1)='-'
insert into tb
select t.zname,r.jp,h.qp
from @col1 t,@col2 r,@col3 h
where t.id=r.id and t.id=h.id
and t.zname not in (select zname from tb)end
--执行
exec getpart '新区分公司-工业园二号门-生活中心-行创四路-行创三路-工业园一号门',
'xqfgs-gyyehm-shzx-xcsl-xcsl-gyyyhm',
'xinqufengongsi-gongyeyuanerhaomen-shenghuozhongxin-xingchuangsilu-xingchuangsanlu-gongyeyuanyihaomen'
--结果
select * from tb
--------------------------
新区分公司 xqfgs xinqufengongsi
工业园二号门 gyyehm gongyeyuanerhaomen
生活中心 shzx shenghuozhongxin
行创四路 xcsl xingchuangsilu
行创三路 xcsl xingchuangsanlu
工业园一号门 gyyyhm gongyeyuanyihaomen
create table #tb(zname nvarchar(20),jp nvarchar(20),qp nvarchar(20));declare @c1 nvarchar(max),@c2 nvarchar(max),@c3 nvarchar(max);
set @c1=N'新区分公司-工业园二号门-生活中心-行创四路-行创三路-工业园一号门';
set @c2=N'xqfgs-gyyehm-shzx-xcsl-xcsl-gyyyhm';
set @c3=N'xinqufengongsi-gongyeyuanerhaomen-shenghuozhongxin-xingchuangsilu-xingchuangsanlu-gongyeyuanyihaomen';
while LEN(@c2)>0 and charindex(N'-',@c2)>0
begin
insert into #tb
select left(@c1,charindex(N'-',@c2)-1),
left(@c2,charindex(N'-',@c2)-1),
left(@c3,charindex(N'-',@c3)-1);
set @c1=right(@c1,len(@c1)-charindex('-',@c1));
set @c2=right(@c2,len(@c2)-charindex('-',@c2));
set @c3=right(@c3,len(@c3)-charindex('-',@c3));
end
insert into #tb select @c1,@c2,@c3;select * from #tb
drop table #tb
/*
新区分公司 xqfgs xinqufengongsi
工业园二号门 gyyehm gongyeyuanerhaomen
生活中心 shzx shenghuozhongxin
行创四路 xcsl xingchuangsilu
行创三路 xcsl xingchuangsanlu
工业园一号门 gyyyhm gongyeyuanyihaomen
*/
貌似迟了
嘿嘿
alter proc dbo.getpart @zname varchar(8000),@jp varchar(8000),@qp varchar(8000)
as
begin
declare @pos int
select @zname=@zname+'-',@jp=@jp+'-',@qp=@qp+'-'
select @pos = charindex('-',@zname)
while @pos >0
begin
if not exists(select 1 from tb where zname=substring(@zname,1,@pos-1))
begin
insert into [tb]
select substring(@zname,1,@pos-1),
substring(@jp,1,charindex('-',@jp)-1),
substring(@qp,1,charindex('-',@qp)-1)
end
select @zname = stuff(@zname,1,@pos,'')
select @jp = stuff(@jp,1,charindex('-',@jp),'')
select @qp = stuff(@qp,1,charindex('-',@qp),'')
select @pos = charindex('-',@zname)
endend