1/1页1 跳转到查看:18
发新话题 回复该主题

求助:又摸不着头脑了><!

求助:又摸不着头脑了><!

SQL code:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
create table tb (ID int , TypeID varchar(30)) :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(1 , '1,2,3,4,5,6,7,8,9,10,11,12') :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(2 , '2,3') :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(3 , '3,7,8,9') :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(4 , '2,6') :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(5 , '4,5'):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
insert into tb values(6 , '6,7'):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
go:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
create function dbo.fn_split(@inputstr varchar(8000), @seprator varchar(10)):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
returns @temp table (a varchar(200))  --@temp a ziduan:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
as :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
begin:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  declare @i int:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  set @inputstr = rtrim(ltrim(@inputstr)):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  set @i = charindex(@seprator , @inputstr):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  while @i >= 1:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  begin:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    insert @temp values(left(@inputstr , @i - 1)):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    set @i = charindex(@seprator , @inputstr):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  end:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  if @inputstr <> '\':º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  insert @temp values(@inputstr):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  return :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
end:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
go:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
--调用:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
declare @str as varchar(30):º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
set @str = '1,2,3,4,5' :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
select distinct m.* from tb m,:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
(select * from dbo.fn_split(@str,',')) n:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
where charindex(',' + n.a + ',' , ',' + m.typeid + ',') > 0:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
drop table tb:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
drop function dbo.fn_split:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
我是随便取个值带进去想的~就是 :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  begin :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    insert @temp values(left(@inputstr , @i - 1)) :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i) :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
    set @i = charindex(@seprator , @inputstr) :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  end :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  if @inputstr  <> '\' :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  insert @temp values(@inputstr) :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
  return  :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
想不太明白,麻烦各位讲下思路~ :º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï
谢谢个:º Ð}°Wۗforum.entlib.net.cn±Ê@%¯a¤Åîï

TOP

 
1/1页1 跳转到
发表新主题 回复该主题