sql-server - TSQL - 使用全文 CONTAINS 的连接

标签 sql-server sql-server-2008 tsql sql-server-2005 full-text-search

我目前有以下选择语句,但我希望转到“关键字”列上的全文搜索。我将如何重写它以使用 CONTAINS?

SELECT MediaID, 50 AS Weighting
FROM Media m JOIN @words w ON m.Keywords LIKE '%' + w.Word + '%'

@words 是一个表变量,里面填满了我要查找的词:

DECLARE @words TABLE(Word NVARCHAR(512) NOT NULL);

最佳答案

如果您不反对使用临时表和 EXEC(我意识到这是一个很大的假设),您可以执行以下操作:

DECLARE @KeywordList VARCHAR(MAX), @KeywordQuery VARCHAR(MAX)
SELECT @KeywordList = STUFF ((
        SELECT '"' + Keyword + '" OR '
        FROM FTS_Keywords
        FOR XML PATH('')
    ), 1, 0, '')

SELECT  @KeywordList = SUBSTRING(@KeywordList, 0, LEN(@KeywordList) - 2)
SELECT  @KeywordQuery = 'SELECT RecordID, Document FROM FTS_Demo_2 WHERE CONTAINS(Document, ''' + @KeywordList +''')'

--SELECT @KeywordList, @KeywordQuery

CREATE TABLE #Results (RecordID INT, Document NVARCHAR(MAX))

INSERT INTO #Results (RecordID, Document)
EXEC(@KeywordQuery)

SELECT * FROM #Results

DROP TABLE #Results

这将生成如下查询:

SELECT   RecordID
        ,Document 
FROM    FTS_Demo_2 
WHERE CONTAINS(Document, '"red" OR "green" OR "blue"')

结果是这样的:

RecordID    Document
1   one two blue
2   three red five

关于sql-server - TSQL - 使用全文 CONTAINS 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152783/

相关文章:

sql - 这个查找(关联)表是否正确? (多对多关系)

sql-server - 带计数的 TSQL 分组

sql - 针对存储过程 SQL Server 进行 SELECT

c# - Sync Framework - 在不更改架构的情况下同步数据

sql - 使用 where 和 group by 子句计算 sql 中的空值

sql-server - 删除周围约束

tsql - 需要启动代理作业并等待完成并获得成功或失败

sql-server - SQL Server 2008事务,需要回滚吗?

sql-server - 估计数据库大小

sql - 查询查询语法错误