使用T-SQL存储过程创建动态搜索

时间:2011-11-15 10:00:38

标签: tsql search stored-procedures dynamic

有没有办法根据单词数创建搜索?

例如,如果我搜索carwheel,它会创建像

这样的T-SQL搜索
select * from table 
where
    (word is like @word1)
    and (word is like @word2)

其中@ word1为car,@ word2为wheel

它可以是任意数量的单词,因此这应该是动态的。

感谢。

4 个答案:

答案 0 :(得分:1)

假设它确实是您要搜索的单词,SQL Server内置全文搜索(http://msdn.microsoft.com/en-us/library/ms142571.aspx) - 它一直存在于至少8年。这并不完美 - 你可以为Lucene做出更好的理由 - 但如果你的需求很简单,那肯定能胜任。

这也意味着您可以使用现成的功能进行文本搜索,例如“模糊”匹配。

由于您没有足够的代码来编写,您将避免伪代码中的错误 -

(word is like @word1)
    and (word is like @word2)
如果word1和word2相同,

只会产生结果...

答案 1 :(得分:1)

试试这个,@ string可以动态地包含你想要的所有单词。它只会找到@table中存在所有单词的行:

declare @wordtable table(word varchar(20))
declare @table table(word varchar(500))

insert @wordtable values('car')
insert @wordtable values('wheel')

insert @table values('carwheel')
insert @table values('car')
insert @table values('wheel')
insert @table values('wheelcat')

select * from @table t
where not exists (select 1 from @wordtable where t.word not like '%' + word + '%')

“包含”可能会更好。但这是解决问题的一种不错的方式。

答案 2 :(得分:0)

这将非常缓慢且无法扩展。 你为什么不考虑使用像Lucene这样的东西。

答案 3 :(得分:0)

我会考虑上面所说的,但是如果你仍然想为此编写sql,你可以试试CHARINDEX函数

declare @searchTerms  varchar(100)
select  @searchTerms = 'WORD1,WORD2,GIRLS,BOYS'  -- some list

select  Field1, Field2 , Field3 , Field4
from    SomeTable
where   CHARINDEX( ',' + Field1 + ',', ',' + @searchTerms + ',' , 0 ) > 0 

因此,如果您愿意,您的searchTerms,Table和Field可以替换为变量,然后构建一个sql语句然后执行