我是SQL Server FTS的新手。所以这可能是一个显而易见的问题,但我无法找到任何答案。我想在一个表的3列上执行搜索。我可以发出如下查询:
来自TBLFTS的SELECT docid CONTAINS(*,' SearchTerm')
现在这个' SearchTerm'可以在C1,C2或C3列中找到,我想知道在哪个列中找到了这个搜索词。它可以在所有列中或任何一个或任意两个中。是否可以知道找到搜索文本的列? 我可以为每个可搜索列创建新表,但这将涉及大量工作,并将成为我的最后手段。 任何有关这方面的帮助将不胜感激。
答案 0 :(得分:0)
这似乎是一个明显的要求,但我也看不出它是如何实现的。你可以单独搜索列和UNION结果。如果你想把结果放在一行,你可以使用像这样的GROUP / MAX / CASE或PIVOT来卷起它们。
; with cte as (
SELECT docid, 'Column1' as ColumnName from TBLFTS where CONTAINS(Column1 , 'SearchTerm')
UNION ALL
SELECT docid, 'Column2' as ColumnName from TBLFTS where CONTAINS(Column2 , 'SearchTerm')
UNION ALL
SELECT docid, 'Column3' as ColumnName from TBLFTS where CONTAINS(Column3 , 'SearchTerm')
)
select
docid,
max(case when ColumnName = 'Column1' then 1 else 0 end) as IsInColumn1,
max(case when ColumnName = 'Column2' then 1 else 0 end) as IsInColumn2,
max(case when ColumnName = 'Column3' then 1 else 0 end) as IsInColumn3
from
cte
group by
docid
你应该检查性能影响,但如果命中率可以忽略,我不会感到太惊讶。
答案 1 :(得分:0)
更简单的答案:
SELECT docid, 'Column1' AS ColumnName1, 'Column2' AS ColumnName2, 'Column3' AS ColumnName3 FROM TBLFTS WHERE CONTAINS(Column1 , 'SearchTerm') OR CONTAINS(Column2 , 'SearchTerm') OR CONTAINS(Column3 , 'SearchTerm')