当前位置: 代码迷 >> Sql Server >> 如何把SQL中一个分割函数的查询,改成存储过程呢? ~ 有完整代码,改成存储过程就好了~ 求
  详细解决方案

如何把SQL中一个分割函数的查询,改成存储过程呢? ~ 有完整代码,改成存储过程就好了~ 求

热度:93   发布时间:2016-04-27 13:03:50.0
怎么把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里面做这个查询 急急急啊~ 先谢谢了




------解决方案--------------------
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)*/
  相关解决方案