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

文章数据表 (article), 其中有一个字段categoryId 是varchar 类型,存放多个文章分类的ID,代表这篇文章属于多个分类。
文章数据表   (article),   其中有一个字段categoryId   是varchar   类型,存放多个文章分类的ID,代表这篇文章属于多个分类。


下面是一个SQL存储过程,   假设用户给定一个参数变量   @categoryId   ,   要的到属于该categoryId   的所有文章。

declare   @categoryId   varchar(2000)
set   @categoryId   =   '2|8|45|78|4|23 '       --   这个存放的都是分类的ID


要得到所有属于该分类的文章,怎么写SQL     ??  
 
是不是要用   WHILE   循环




------解决方案--------------------
一种方法是把输出的字符串通过字符分割把它转换成一个内存中的表,然后再做JOIN,参考
http://sql-server-performance.com/Community/forums/p/20608/114964.aspx

另一个方法是在你的字符串前后加|

declare @categoryId varchar(2000)
set @categoryId = '|2|8|45|78|4|23| '

然后用charindex方法看你字段 '| '+categoryId + '| '是否在@categoryId

select * from yourtable where charindex( '| '+categoryId + '| ',@categoryId) > 0