如何把SQL中一个分割函数的查询,改成存储过程呢? ~ 有完整代码,改成存储过程就好了~ 求
怎么把SQL中一个分割函数的查询,改成存储过程呢??? ~~ 有完整代码,改成存储过程就好了~ 求助求助求助求助求助求助求助求助求助求
第一张表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里面做这个查询 急急急啊~ 先谢谢了
------解决方案--------------------
第一张表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_illegal select 1011, '1097|10151' union all select 1012, '1090|10951' insert into Tra_law select 1097, '非法安装报警器' union all select 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 apply select a.*,b.*,c.* from Tra_illegal a cross apply [f_split](a.thekey,'|') b inner join Tra_law c on 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) */