Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

TSQL - Ein Join mit Volltext CONTAINS

Wenn Sie nicht gegen die Verwendung einer temporären Tabelle und EXEC sind (und mir ist klar, dass das ein großes Wenn ist), könnten Sie Folgendes tun:

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

Dies würde eine Abfrage wie die folgende generieren:

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

Und Ergebnisse wie diese:

RecordID    Document
1   one two blue
2   three red five