我的程序在運行時產生一個列表值。我需要發送一個sql查詢,該查詢在表中查找具有包含列表中某個值的列的條目。我不能使用通常的OR鏈,因爲我不知道列表會有多大。有沒有一種很好的方式來使用數組或一些IEnumerable來構建一條SQL語句,爲我創建一個大型的OR鏈?使用C#BTW如何以一種很好的方式以編程方式發送SQL Server select語句中的值列表?
我正在使用SQL Server,但我更喜歡一些適用於所有數據庫的東西,如果存在這樣的事情。
謝謝!
我的程序在運行時產生一個列表值。我需要發送一個sql查詢,該查詢在表中查找具有包含列表中某個值的列的條目。我不能使用通常的OR鏈,因爲我不知道列表會有多大。有沒有一種很好的方式來使用數組或一些IEnumerable來構建一條SQL語句,爲我創建一個大型的OR鏈?使用C#BTW如何以一種很好的方式以編程方式發送SQL Server select語句中的值列表?
我正在使用SQL Server,但我更喜歡一些適用於所有數據庫的東西,如果存在這樣的事情。
謝謝!
試試這個:
SELECT * FROM table WHERE column IN (@param)
並確保你把@param到表單 「 '@ P1,P2 @,@ P3'」 用你選擇的語言的破滅功能。
查詢應該是我知道的所有SQL的標準。
或者,如果你想要做LIKE比較:
SELECT * FROM table WHERE @param LIKE '%' (COALLESCE) column (COALLESCE) '%'
@參數仍然是一個引用的字符串,但你需要使用不同的COALLESCE運營商根據您的數據庫(SQL服務器:「+」, MySQL:'。',Oracle:'|')。
示例PHP破滅代碼:
$ps = array('1', 'test', '323');
$param = implode(',', $ps);
實例C# 「內爆」 代碼:
string[] ps = new string[] { "test", "blah", "boo" };
string param = string.Join(",", ps));
閱讀了厄蘭Sommarskog的優秀Arrays and Lists in SQL Server文章 - 他非常詳細,並與偉大的見解什麼可以解釋在哪個版本的SQL Server中完成。我也認爲這將是特定於數據庫的,我沒有看到任何方法可以兼容ANSI SQL或在其他數據庫上工作 - 對於每個數據庫,字符串和XML處理過於具體,我猜測。
有一兩件事你可以嘗試在存儲過程表值參數在MS-SQL:
http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters
不僅是unmessy因爲所有你要做的就是添加行到您的表對於列表中的每個值而言,它們都是值參數,但與備選方案相比,它也可以快速執行,因爲SQL DBMS可以在每次運行查詢時重複執行計劃,因爲參數數量永遠不會發生變化。
謝謝,這很快捷! 看起來像「IN」也是在SQL標準,這是很好的。 – 2010-07-08 05:43:17