通过列表
SQL 存储过程是对数据库操作进行分组的便捷方法,可确保数据完整性并简化开发过程。但是,将值列表传递给存储过程可能具有挑战性。
当前方法
传统上,开发人员会在代码中将列表转换为串联字符串。例如,提供的代码片段迭代整数列表,将它们与分隔符(例如“~”)连接起来以创建单个字符串。然后,该字符串作为参数传递给存储过程,该存储过程使用用户定义的函数将其拆分为整数表。
虽然这种方法有效,但效率低下且容易出错。
表值参数
SQL Server 2008 引入了一项称为表值参数的功能,这为这个问题提供了一个更优雅的解决方案。表值参数允许您将表作为参数传递给存储过程。这消除了对字符串连接和用户定义函数的需要。
更新的代码
要使用表值参数,需要将代码和存储过程更新:
代码
public void AddItemsToReport(string connStr, int Id, List<int> itemList) { Database db = DatabaseFactory.CreateDatabase(connStr); string sqlCommand = "AddItemsToReport" DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); DataTable itemsTable = ToDataTable(itemList); // Add parameters db.AddInParameter(dbCommand, "ReportId", DbType.Int32, Id); db.AddTableParameter(dbCommand, "Items", itemsTable); db.ExecuteNonQuery(dbCommand); } private DataTable ToDataTable<T>(List<T> list) { DataTable table = new DataTable(); table.Columns.Add("Id", typeof(T)); foreach (var item in list) table.Rows.Add(item); return table; }
存储过程
INSERT INTO ReportItem (ReportId,ItemId) SELECT @ReportId, Id FROM @Items
在此更新的代码中,整数列表转换为 DataTable 并作为表值参数传递。存储过程不再需要自定义函数来提取值。
这种方法有几个好处:
以上是如何高效地将整数列表传递给 SQL 存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!