使用像sql一样的值列表

时间:2011-03-29 23:31:43

标签: tsql sql-server-2008

在transact sql中我有:

 DECLARE @phrase='KeyWord1 KeyWord2 ,KeyWord3 ' -- and my be more separated by space,comma or ;(but mainly by space=it's a phrase)

 I have a table Students
              Students
             (
                StudentId bigint,
                FullName nvarchar(50),
                Article nvarchar(max)
             ) 

我希望通过引入那些文章中包含@phrase

的文章来过滤学生
  Something like:
       DECLARE @WOrdTable TABLE
       (
        Word nvarchar(50)
       )
       INSERT INTO @WOrdTable
       SELECT WOrd of @phrase

   SELECT *
   FROM Students
   WHERE Article LIKE (Word in @phrase)

1 个答案:

答案 0 :(得分:2)

我会将您的字符串(逗号分隔)拆分为单词短语的临时表,并对Students表执行连接。从那里你可以更好地利用数据,而不是字符串格式

有很多方法可以将字符串拆分成表格:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648

一旦你有临时表,就可以使用这样的东西。

SELECT S.*
FROM Students S (NOLOCK)
JOIN @tmpArticles A
  ON S.Articles LIKE '%' + A.Article '%'

但请注意,在%X%上使用LIKE会产生糟糕的性能,因此如果您有大量字符串数据,请质疑您的方法。

这个问题似乎更倾向于全文搜索方法(FTS)

http://msdn.microsoft.com/en-us/library/ms142571.aspx