7
我在使用CONTAINS
謂詞重寫現有流程時遇到問題。現有的流程正在使用CURSOR
,但它確實很慢,並且隨着插入的數據越來越慢。SQL Server CONTAINS謂詞 - 使用列值作爲<contains_condition>
我已經由包含兩個表一個簡單的例子(下面的代碼) - 酮是全文收錄,另一個具有識別CONTAINS
條件來選擇來自所述第一行的一列。
當前存儲過程使用CURSOR
循環遍歷第二個表,設置@filter
變量,然後使用CONTAINS
來查找匹配的第一個表中的行。問題是它運行了幾個小時,並且變得更糟。
爲了加快這個過程,我試圖直接在列值上使用謂詞,而不是經歷遊標的痛苦......但是我得到一個語法錯誤。我的例子如下。
我試過執行CROSS APPLY
,我也試圖編寫一個用戶定義的函數(fnCONTAINS
)沒有運氣。
IF (object_id('Players') IS NOT NULL)
DROP TABLE Players
go
IF (object_id('TeamNeeds') IS NOT NULL)
DROP TABLE TeamNeeds
go
-- create fulltext catalog ft as default
go
CREATE TABLE Players
(
PlayerID INT IDENTITY(1, 1),
PlayerName VARCHAR(20),
PlayerPositions VARCHAR(60)
)
go
CREATE UNIQUE INDEX IXPlayerID
ON Players(PlayerID)
go
CREATE fulltext INDEX ON Players(PlayerPositions) KEY INDEX IXPlayerID
go
INSERT Players
(PlayerName,
PlayerPositions)
VALUES('Patrick Travers',
'Pitcher,Left Field,Center Field,Right Field,Shortstop')
go
CREATE TABLE TeamNeeds
(
TeamID INT,
Keywords VARCHAR(50)
)
go
INSERT TeamNeeds
(TeamID,
Keywords)
VALUES(1,
'"Center Field" and "Shortstop" and "Pitcher"')
go
WAITFOR delay '00:00:05'
go -- Give the Full Text Index process time to populate the catalog
SELECT PlayerID,
PlayerName,
PlayerPositions
FROM Player,
TeamNeeds
WHERE CONTAINS(PlayerPositions, Keywords)
go -- Syntax error on Keywords...
SELECT PlayerID,
PlayerName,
PlayerPositions
FROM Players,
TeamNeeds
WHERE CONTAINS(PlayerPositions, '"Center Field" and "Shortstop" and "Pitcher"')
go -- Works just fine, but requires setting an explicit search expression for every search, which is terribly slow
我刪除了評論分隔符,所以讓你的代碼更具可讀性。 – Khan
我一直在尋找回答這個問題。我看着雖然stackoverflow和MS的文檔,但它看起來像你不能做CONTAINS(table1.col,table2.col)。你只能做CONTAINS(table1.col,'文本')或CONTAINS(table1.col,@some_text)。我希望有人來證明我錯了。 – Nico
你有沒有想過如何解決這個問題?我有完全相同的問題。 –