您的位置:首页 > 数据库

实现MS SQL存储过程中传入的“,”分隔字符串的(in)操作

2008-08-27 17:25 260 查看
传入的@items值是(2,3,5,8,)这种类型

/*显示选中的商铺的资讯列表*/
CREATE procedure select_NewListByshopId
@flag int,
@keyword Varchar(50),
@sDate DateTime,
@items varchar(100)
as
declare @split varchar(1)
set @split=','
declare @T_Module table(m varchar(4000))
while charindex(rtrim(@split),@items) <>0
begin
set @items=ltrim(rtrim(@items))
if(substring(@items,1,1) <>@split)
begin
insert into @T_Module (m) values(substring(@items,1,charindex(@split,@items)-1))
set @items =stuff(@items,1,charindex(@split,@items),'')
end
else
begin
set @items=stuff(@items,1,1,'')
end
end
if rtrim(@items) <>''
insert into @T_Module (m) values (@items)

select a.ID,a.sort,a.Title,a.ByUrl,a.Url,a.Target,a.Content,
a.AddTime,a.AddUser,b.MemName,c.StoreName,c.SysTemClass
from db_Announce as a
Left Join db_Member as b on a.AddUser = b.Id
LEFT JOIN db_Store as c on a.AddUser= c.UserID
where 1=1 and a.IsAttest = ( case when @flag=1 then 1 when @flag=0 then 0 end)
AND c.ID IN (select m from @T_Module)
AND convert(datetime, cast(year(a.AddTime) as varchar(4)) + '-' + cast(month(a.AddTime) as varchar(2)) + '-' + cast(day(a.AddTime) as varchar(2)), 110)
= ( case when @sDate<>" " then @sDate
else convert(datetime, cast(year(a.AddTime) as varchar(4)) + '-' + cast(month(a.AddTime) as varchar(2)) + '-' + cast(day(a.AddTime) as varchar(2)), 110) end )
AND a.Title LIKE '%'+@keyword +'%'
order by a.sort asc , a.ID ASC
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: