1
我试图写一个存储过程来选择NewsItem列表记录其中每个NewsItem拥有所有分类是的在一个列表中。如果列表为空,那么它应该返回所有新闻项目。
NewsItem NewsItemCategories Category
-------- ------------------ --------
NewsID NewsID CategoryID
Post CategoryID CategoryName
我通过逗号分隔的类别名称的列表,以我的存储过程,并创建了一个返回这些类别的表中的功能。
exec sp_GetNewsItems 'sport,football,hockey'
EntityNameColumn - table returned from my function BuildStringTable
----------------
sport
finance
history
我曾尝试
select NI.NewsID, NI.Post
from NewsItem NI
where (@pCategories = '' or
(select COUNT(*)
from NewsItemCategories NIC
inner join Category C on NIC.CategoryID = C.CategoryID
inner join BuildStringTable(@pCategories) CT on C.CategoryName = CT.EntityNameColumn
where NIC.NewsID = NI.NewsID) > 0)
问题
如果你传递一个类别名称的查询工作,但是当你传递多个类别名称不起作用。在上面的示例查询中,这应该返回包含至少至少的NewsItems,Categories运动,足球,曲棍球。