您無法將列表作爲單個SQl參數傳遞。你可以string.Join(',')GUID,比如「0000-0000-0000-0000,1111-1111-1111-1111」,但是這對數據庫開銷和次優確實很高。您必須將整個字符串作爲單個連接的動態語句傳遞,不能將其添加爲參數。
問題:
你從哪裏得到您的ID代表非活動客戶的列表?
我的建議是以不同的方式解決問題。將所有的邏輯到數據庫中,這樣的:
Create procedure usp_DeactivateCustomers
@inactive varchar(50) /*or whatever values are required to identify inactive customers*/
AS
UPDATE Customer SET c.Active = 0
FROM Customer c JOIN tableB b ON c.CustomerID = b.CustomerID
WHERE b.someField = @inactive
並把它作爲一個存儲過程:
public void InactiveCustomers(string inactive)
{
//...
myAdoCommand.CommandText =
"usp_DeactivateCustomers";
myAdoCommand.Parameters["@inactive"].Value = inactive;
//...
}
如果GUID在一個數據庫中的表,爲什麼我需要到:找到他們;把它們放在一個通用的列表中;將列表展開爲一個CSV/XML/Table變量,只是將它們呈現回DB。他們已經在那裏!我錯過了什麼嗎?
http://www.sommarskog.se/arrays-in-sql-2005.html和http://www.sommarskog.se/arrays-in-sql-2000.html是關於此主題的參考資料。他們也比Vyas的更詳細地討論了優點和缺點。 – 2009-08-01 01:26:28