这是我的要求:
- 我想删除表格的多行
- 我有需要在客户端应用程序中删除的所有 id 的列表。
- 我只想从我的 C# 客户端应用程序中进行一次调用以删除所有这些记录。
我之前的:
foreach (var id in idList)
{
//Call a Stored Procedure which takes the id
//as parameter and deletes the record
}
这是一个问题,因为循环中的每个项目都有一个数据库命中。
然后我开始使用SQL Server 2008 新引入的表类型和表值参数用于存储过程。
- 首先在数据库中创建一个表类型,该表类型具有单列(Id 类型)
- 创建一个接受此新表类型(表值参数)的新存储过程
- 在客户端代码中,创建一个包含所有要删除的 id 的列表/数据表。
- 对数据库进行一次调用以使用新的存储过程。
它在客户端代码中非常简单,如下所示:
SqlParameter parameter = new SqlParameter();
parameter.SqlDbType = System.Data.SqlDbType.Structured;
好的 - 虽然我达到了我设定的目标,但这绝对不适用于 2008 年之前的 SQL Server 版本。
所以我所做的就是引入一个回退机制:
- 我介绍了一个存储过程,它采用逗号分隔的 id 值
- 我的客户端代码将创建这样的逗号分隔的 id,然后简单地将其传递给新的存储过程。
- 然后存储过程将拆分所有这些 id,然后一一调用 delete。
- 因此,在某种程度上,即使在 2008 年之前的 SQL Server 版本上,我也实现了我所设定的目标:使用单个数据库命中删除多行。
但我对我采取的最后一种方法并不那么信服——在互联网上快速搜索并没有发现太多东西。
所以有人可以告诉我,如果我用逗号分隔的 id 和所有东西做正确的事情。
如果 id 是已知的,那么通过单个数据库命中从客户端应用程序中删除多条记录的通常最佳做法是什么。
提前致谢。