是否可以将ID的集合作为ADO.NET SQL参数发送?

Tho*_*sen 20 .net sql ado.net

例如.我可以写这样的代码:

public void InactiveCustomers(IEnumerable<Guid> customerIDs)
{
    //...
    myAdoCommand.CommandText =
        "UPDATE Customer SET Active = 0 WHERE CustomerID in (@CustomerIDs)";
    myAdoCommand.Parameters["@CustomerIDs"].Value = customerIDs;
    //...
}
Run Code Online (Sandbox Code Playgroud)

我知道的唯一方法是加入我的IEnumerable,然后使用字符串连接来构建我的SQL字符串.

Eri*_*ard 17

通常,执行此操作的方法是传入逗号分隔的值列表,并在存储过程中解析列表并将其插入临时表,然后可以将其用于连接.从Sql Server 2005开始,这是处理需要保存数组的参数的标准做法.

这是一篇关于处理这个问题的各种方法的好文章:

将列表/数组传递给SQL Server存储过程

但是对于Sql Server 2008,我们最终将表变量传递给过程,首先将表定义为自定义类型.

本文中对此(以及更多2008功能)有一个很好的描述:

SQL Server 2008中新的T-SQL可编程性功能简介

  • http://www.sommarskog.se/arrays-in-sql-2005.html和http://www.sommarskog.se/arrays-in-sql-2000.html是关于此主题的参考读物.他们还比Vyas更详细地讨论了利弊. (2认同)

Jon*_*upp 5

你可以使用SQL 2008.它还没有很长时间,但它是可用的.