2013-08-29 47 views
0

我正在傳遞一個SQL參數值。具有多個值的SQL參數

所以現在我有:

SqlParameter sqlParameter = new SqlParameter("@Parameter", SqlDbType.VarChar); 
sqlParameter.Value = ParameterValue 

,這在我的SQL查詢工作的罰款在我WHERE條款。

但是現在我想離開選項以在我的WHERE中傳遞多個值。

而不是傳遞一個常規字符串,我想傳遞一個逗號分隔字符串的值。

所以SqlParameter.Value = "value1, value2, value3";

,我希望它像

WHERE Parameter = value1 OR Parameter = value2 OR Parameter = value3

是否有一個簡單的方法來做到這一點,我不竟要修改我的SQL查詢?

+2

不,你不能。 – Rik

+1

簡短回答:否 - 您需要傳入多個參數(除非您只傳入一個字符串並在(v1,v2)查詢中使用'where參數 - 但這會打開您的SQL注入 – BrokenGlass

+0

請參見[參數化SQL IN子句?](http://stackoverflow.com/questions/337704/parameterizing-an-sql-in-clause?lq=1) –

回答

0

如果您的查詢是「where參數= @參數」,則不適用。

要麼改變你的查詢「其中參數......」

或把自己的價值觀到另一個表/表變量,並加入他們的行列。

1

底線:您將不得不更改SQL語句或存儲過程來支持您正在嘗試執行的操作。

在我看來,有很多不同的方法可以完成你想要完成的任務,但沒有一個是理想的。 Erland Sommarskog寫了一篇很好的文章,解釋了許多將數組和列表傳遞給SQL Server的方法(http://www.sommarskog.se/arrays-in-sql-2005.html),我推薦閱讀。如果您使用SQL Server 2008或更高版本,乾淨的方法是使用表值參數(http://www.sommarskog.se/arrays-in-sql-2008.html)。通過這種方法,您基本上將一組值傳遞到SQL Server。

如果使用表值參數方法,您的參數將表現得像一個表,您可以從中選擇值。所以,舉例來說,你可以修改你的存儲過程(或SQL語句),像這樣:

CREATE PROCEDURE get_products @Parameter myCustomParameterType READONLY AS 
SELECT p.ProductID, p.ProductName 
FROM Products p 
WHERE p.ProductID IN (SELECT n FROM @Parameter) 

還有另外一個SO問題/答案提供關於這種方法在這裏更詳細:How to pass table value parameters to stored procedure from .net code

更多信息上表值參數可以在這裏找到:http://msdn.microsoft.com/en-us/library/bb675163.aspx