日期:2014-05-18  浏览次数:20373 次

怎么把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_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)
*/