搜索关键字并检索找到它的列?

时间:2010-10-29 16:55:13

标签: sql sql-server-2005

我有一些表,例如:Car(id,NameCar)和Person(id,PersonName,Address等)

我需要搜索一个关键字并说出我找到它的列。

示例:搜索Civic,返回ID为10的人在Car Name和地址名称中包含Civic。

如何以良好的表现做到这一点?

3 个答案:

答案 0 :(得分:1)

制作一个包含所有相关列的视图。然后查询该视图。

有助于显示特定的数据值和预期结果。

或者你要使用一个带有UNIONs的结构,并指出该行来自哪个联盟..类似于:

select name, 1 from person where name like '%civic%'
union
select street,2 from address where street like '%civic%'

...

答案 1 :(得分:1)

我不确定其他选项的性能如何,但是当我们需要这种类型的功能时,我们创建了一个全文目录。您可以在[DatabaseName] - 存储 - 全文目录下的SSMS中找到此功能。定义要索引的字段,然后让它构建。然后你可以查询索引。

这是一篇很好的文章来补充我可怕的描述:http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm

答案 2 :(得分:0)

我使用全文索引以获得更好的性能:

SELECT
    A.UserId,
    CASE WHEN CONTAINS(C.nm_colaborador, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Nome,
    CASE WHEN CONTAINS(C.dc_cidades, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Cidade
FROM
    Curriculo A
    INNER JOIN CONTAINSTABLE(Curriculo_Busca, *, @palavraChave) B ON A.UserId = B.[KEY]
    INNER JOIN Curriculo_Busca C ON B.[KEY] = C.UserId