第一张表Tra_illegal 第二张表Tra_law
字段1 字段2 字段1 字段2
illegalid thekey sysid thetext
1011 1097|10151 1097 非法安装报警器 (下面是值哈)
1012 1090|10951 10151 酒后驾驶
1090 《道法》
10951 超载
要实现的功能:通过输入第一张表的illegalid,查询到第二张表的字段内容,分割thekey,(如分割1097|10151成1097和10151去查,查出2表中的两条记录)
下面上我的代码,帮忙给改成存储过程。。。 能改吗??
create function [f_split](@c varchar(2000),@split varchar(2)) (先是一个分割函数)
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
go
declare @r varchar(200) ;
select @r = thekey from dbo.Tra_illegal ;
select * from dbo.Tra_law where sysid in (select col from [f_split](@r,'|')) ;
有耐心的朋友帮忙看下能改下不, 因为我要在VS里面做这个查询 急急急啊~ 先谢谢了
------解决方案--------------------
- SQL code
create table Tra_illegal (illegalid int, thekey varchar(15))create table Tra_law(sysid int, thetext varchar(20))insert into Tra_illegalselect 1011, '1097|10151' union all select 1012, '1090|10951'insert into Tra_lawselect 1097, '非法安装报警器' union allselect 10151, '酒后驾驶' union all select 1090, '《道法》' union all select 10951, '超载'-- 楼主的函数create function [f_split](@c varchar(2000),@split varchar(2))returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,charindex(@split,@c),'') end insert @t(col) values (@c) return end -- 用cross applyselect a.*,b.*,c.*from Tra_illegal across apply [f_split](a.thekey,'|') binner join Tra_law con b.col=c.sysid-- 结果/*illegalid thekey col sysid thetext----------- --------------- -------------------- ----------- --------------------1011 1097|10151 1097 1097 非法安装报警器1011 1097|10151 10151 10151 酒后驾驶1012 1090|10951 1090 1090 《道法》1012 1090|10951 10951 10951 超载(4 row(s) affected)*/