2010-08-05 58 views
1

我需要創建一個接收參數(名爲@codes)的存儲過程。存儲過程:在傳遞數組值時在表中搜索

這是一個字符串,其中包含由一個半列分隔的代碼列表。 我需要查看一個表的內部並返回所有具有代碼(這是在EANcodes列中)在@codes參數中傳遞的所有行。

任何人都可以幫助我開始。我對存儲過程的瞭解非常有限。

在此先感謝。

回答

0

存儲過程並非真正意味着將字符串列表作爲參數來處理。你最好在應用程序代碼中分割它,然後多次調用存儲過程,每個參數都作爲參數。

但是,如果你覺得有必要這樣做。您可以遍歷字符串,然後使用CHARINDEX查找分號的下一個索引,然後使用SUBSTRING獲取下一個代碼。然後,您可以在每次迭代中使用CTE作爲匹配行,並且在完成循環時,只需返回CTE即可。這很哈克,但我想不出有任何其他的方式來做到這一點。 (這些都是T-SQL字符串函數)

有關字符串處理函數信息(在T-SQL):http://msdn.microsoft.com/en-us/library/ms186323.aspx

這裏有類似的功能在MySQL:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

+0

或者,對於快速而髒的解決方案,請使用REPLACE()將分號轉爲逗號,然後使用動態SQL將其插入IN(...)子句中。但我不能真正推薦這個答案,因爲做這種事情是一個很大的跡象,說明你的設計錯了! – 2010-08-05 14:19:14

1

理想情況下,我寧願看到以另一種方式傳遞的參數,或者使用table-value parameter(假設SQL 2008)或可以輕鬆分解到表中的XML。

或者,使用SQL拆分功能(一個示例是here)將字符串解析爲臨時表,然後在選擇查詢中針對該表加入。

相關問題