2012-01-20 102 views
0

我正在一個項目上工作,我脖子掛在查詢(問題)。「贊」在SQL Server中搜索(,)在字符串中分隔參數

我已經聲明瞭用(,)分隔的SQL Server中的一串鍵。我想通過使用LIKE關鍵字從某個表中搜索字符串中基本鍵的數據。

我該怎麼辦?

例如

@SearchKey='Game,Movie,Raw'  

這些都是一些按鍵,我想用LIKE關鍵字

+0

你能舉一個這樣的字符串和你想要生成的'LIKE'語句的例子嗎? – GolfWolf

+0

@ SearchKey ='遊戲,電影,原始'這些是我想在表格中使用LIKE關鍵字搜索的一些鍵 – Kamlesh

+2

這應該被拆分到另一個表中。閱讀第一個正常表格。 –

回答

2

如果我正確理解你的問題在表中進行搜索,那麼你可能例如對於被搜索的價值AA,BG,FR,DE鍵如BGDE。假設你的名單還沒有初始或結尾逗號,那麼這應該在WHERE條款的工作:

WHERE ',' + ListOfKeys + ',' LIKE '%,' + KeyToFind + ',%' 
+0

(從OP的編輯嘗試複製的文本)「是的,你說得對,但我不明白你的觀點,你能詳細說明一下,因爲我想搜索表中的鍵和字符串形式的鍵」 – Blorgbeard

3

這是否幫助你嗎?儘管如此,我不會推薦這樣做(出於性能原因)。

declare @keys varchar(max) 
set @keys = '1,200,123,44' 

select * from sometable where (',' + @keys + ',') like '%,' + sometable.key + ',%' 
+0

但是鍵不是數字。那可能是'Gam,ra,Mo',桌上的數據是Game,Raw和Movies。 – Kamlesh

+0

@Kamlesh它仍然可以與「Gam,ra,Mo」一起工作 - 我只是假設數字 – Blorgbeard

+0

哦,等等,你想讓「Gam,ra,Mo」匹配「遊戲」,「原始」和「電影」? – Blorgbeard

0

還有其他幾種可能的解決方案。這些都不是快速修復,取決於您目前的設計可能需要大量工作,但潛在的性能提升將有助於開展工作。

如果您要搜索的數據存儲在以逗號分隔的列表中,那麼最好的解決方案是修復您的數據模型並將數據存儲在相關的表中。

如果您的數據是long varchar max類型字段,並且您正在搜索文檔中的關鍵術語,請查看如何執行全文搜索。這將比任何類似的聲明表現得更好。

或者,如果您正在存儲大型文檔並且想要搜索它們,請考慮使用文檔數據庫而不是關係數據庫來執行此部分項目。它們更好地處理文檔。

4

我會做一個表值函數,它分割字符串並從中創建表。 代碼可能看起來像這樣:

Create Function [dbo].[MyFunction] 
(
    @List NVarChar(Max) 
) 
Returns @IDList TABLE 
(
    ID int 
) 
With SchemaBinding 
As 
Begin 
    Declare @myList NVarChar(Max); 
    Declare @value NvarChar(Max); 

    SET @myList = @List; 

    While(Charindex(',', @myList) != 0) 
    Begin 
     SET @value = Substring(@myList , 1, Charindex(',', @myList) - 1); 
     Insert Into @IDList (ID) Values (@value) 
     SET @myList = Substring(@myList, Charindex(',', @myList) + 1, Len(@myList)); 
    End 

    Insert Into @IDList (ID) Values (@myList) 

    Return; 
End 

然後連接表。

相關問題