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¤Åîï