2010-02-01 40 views
2

我該如何編寫存儲過程,以便在給定的字符串集合(CSV字符串)的表格列中搜索特定的字符串。如何編寫搜索存儲過程(CSV)?

,如:SELECT * FROM xxx其中像標籤(「奧斯卡」,「拉赫曼」,「貧民窟的百萬富翁」)

如何我寫的標記,組合的過程。

+0

是否有任何理由需要使用SQL Server解析文件作爲RDBMS更適合存儲數據,而不是專門用於解析CSV文件。 – Kane 2010-02-01 08:40:10

+0

嗨,凱恩先生其實在我的項目中我有一個搜索按鈕,那裏的用戶可以給任何組合名稱。我怎麼寫商店程序。 – 2010-02-01 08:43:30

回答

0

要創建一個逗號分隔字符串...

然後,您可以將此列表俄德例如創建LIKE部分WHERE cluase上飛的。

DECLARE @pos int, @curruntLocation char(20), @input varchar(2048) 
SELECT @pos=0 
SELECT @input = 'oscar,rahman,slumdog' 
SELECT @input = @input + ',' 

CREATE TABLE #tempTable (temp varchar(100)) 

WHILE CHARINDEX(',',@input) > 0 
BEGIN 
SELECT @pos=CHARINDEX(',',@input) 
SELECT @curruntLocation = RTRIM(LTRIM(SUBSTRING(@input,1,@pos-1))) 
INSERT INTO #tempTable (temp) VALUES (@curruntLocation) 
SELECT @input=SUBSTRING(@input,@pos+1,2048) 
END 

SELECT * FROM #tempTable 
DR0P TABLE #tempTable 
+0

先生Kevchadders我修改像這樣 創建過程廢料的步驟(@string VARCHAR(200))作爲 DECLARE @pos INT,@curruntLocation炭(20),@input VARCHAR(2048) SELECT @ POS = 0 SELECT @input = @string SELECT @input = @input + '' CREATE TABLE #tempTable(溫度爲varchar(100)) WHILE CHARINDEX( '',@輸入)> 0 BEGIN SELECT @ POS = SELECT @ input = SUBSTRING(@curruntLocation) SELECT @ input = SUBSTRING(',', (@ input,@ pos + 1,2048) END select * from videos where(select * from #temptable) – 2010-02-01 09:29:46

+0

當我運行該程序時顯示沒有列可以幫助我 我chage一些代碼你可以看看我的代碼的按鈕,我發送它以前的代碼謝謝 – 2010-02-01 09:31:05

+0

不要忘記刪除臨時表,並測試,以確保數據存在於#temptable之前,你從vidoes表中選擇。例如在選擇* from Vidoes之前放置一個SELECT * FROM #tempTable ... – kevchadders 2010-02-01 14:13:35

0

首先,精確匹配使用like是次優。還不如用=,如果這樣做,你可以使用IN語法:

select * from xxx 
where tags IN ('oscar', 'rahman', 'slumdog') 

我猜你是不是在找一個精確匹配,但對於任何記錄其中tags字段包含所有標籤。

這將是這樣的:

select * from xxx 
where tags like '%oscar%' 
    and tags like '%rahman%' 
    and tags like '%slumdog%' 

這會不會非常快或高性能雖然。

考慮將這種邏輯轉移到您的應用程序中,它可以更快,更容易地執行。

編輯:

繼意見 - 有很多例子就如何parsedelimitedstrings在那裏。你可以把它們放在一個表格中,並使用dynamic sql生成你的查詢。

但是,這將有不良的性能和SQL Server將無法緩存這種事情的查詢計劃。正如我上面所說 - 考慮將這種邏輯轉移到應用程序級別。

+0

確定它工作正常,但我有疑問。我們不知道有多少字符串會給用戶如何編寫 – 2010-02-01 08:53:10

+0

的程序,在上面我給oscar,rahman,slumdog。如果用戶當時會給出任意數量的字符串,那麼我們如何編寫該存儲過程? – 2010-02-01 08:54:38

+0

你想解析一個逗號分隔的字符串並在其上搜索嗎? – Oded 2010-02-01 08:56:46