您不能将列表作为单个 SQl 参数传递。您可以 string.Join(',') 诸如“0000-0000-0000-0000, 1111-1111-1111-1111”之类的 GUIDS,但这会增加数据库开销并且确实不是最佳的。而且您必须将整个字符串作为单个连接的动态语句传递,您不能将其添加为参数。
问题:
您从哪里获得代表不活跃客户的 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 ????? 他们已经在那里了!我错过了什么吗?