你可以聯合5個人的情況下,然後PIVOT和連接。我不確定它比動態SQL更好。
你最終會得到這樣的:
SET @FindKey = '%B%E%' -- This is your search which field criteria
WITH RESULTS1 AS (
SELECT PK, 'A' AS Col
FROM SomeTable ST
WHERE @FindKey LIKE '%A%' AND CONTAINS(ST.ColumnA, '"Strawberry"')
UNION
SELECT PK, 'B' AS Col
FROM SomeTable ST
WHERE @FindKey LIKE '%B%' AND CONTAINS(ST.ColumnB, '"Strawberry"')
UNION
SELECT PK, 'C' AS Col
FROM SomeTable ST
WHERE @FindKey LIKE '%C%' AND CONTAINS(ST.ColumnC, '"Strawberry"')
UNION
SELECT PK, 'D' AS Col
FROM SomeTable ST
WHERE @FindKey LIKE '%D%' AND CONTAINS(ST.ColumnD, '"Strawberry"')
UNION
SELECT PK, 'E' AS Col
FROM SomeTable ST
WHERE @FindKey LIKE '%E%' AND CONTAINS(ST.ColumnE, '"Strawberry"')
)
,RESULTS2 AS (
SELECT PK, ISNULL([A], '') + ISNULL([B], '') + ISNULL([C], '') + ISNULL([D], '') + ISNULL([E], '') AS FoundKey
FROM RESULTS PIVOT (MIN(Col) FOR Col IN ([A], [B], [C], [D], [E])) AS pvt
)
SELECT *
FROM SomeTable
INNER JOIN RESULTS2
ON RESULTS2.PK = SomeTable.PK
WHERE RESULTS2.FoundKey LIKE @FindKey
不使用含有做全文搜索。 – HLGEM 2009-10-13 21:51:18
如果您認爲SQL將使邏輯更加快捷,您是不是會使用'和'子句或'or',因此第一個子句爲false會創建快捷方式? – Andrew 2009-10-13 21:56:02
圓括號內的OR會告訴SQL,如果第一個參數爲空,則不要檢查第二個條件,對於每個「AND」行,依此類推 – 2009-10-13 21:59:26