【问题标题】:Should we use a single execution stored procedure with table parameters or multiple execution procedure with separated parameters?我们应该使用带有表参数的单个执行存储过程还是带有单独参数的多个执行过程?
【发布时间】:2017-11-19 23:50:24
【问题描述】:

我正在开发一个 WinForms 桌面应用程序。在这个应用程序上,我必须对 SQL Server 数据库进行一些更新。我可以使用带有表参数

的存储过程来做到这一点
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.AddWithValue("@changes", changes.ToTable(false, "ItemNo", "Info"));

执行过程只执行一次,或者循环执行过程多次,使用字符串参数。

for (...)
{
   ...
   comm.CommandType = CommandType.StoredProcedure;
   comm.Parameters.AddWithValue("@Item", "Item 1"));`
   comm.Parameters.AddWithValue("@Info", "Info 1"));`
   int i = comm.ExecuteNonQuery();
   ...
}

这样做的最佳做法是什么?

【问题讨论】:

  • 了解您在该存储过程中执行的操作很重要。如果它只是几条记录的插入/更新,我根本不会使用存储过程,而是使用正确的书面参数化查询(肯定不使用 AddWithValue)
  • 存储过程不包含任何复杂的操作,只是一个简单的更新。我不在我的应用程序中使用 SQL 查询来保持应用程序层分开,所以你的建议对我的情况没有帮助。
  • 您也可以传入 XML 并将其作为批处理更新。

标签: c# sql performance stored-procedures processing-efficiency


【解决方案1】:

即使您正在执行简单的UPDATE 操作,我也会采用第一种方法并将所有数据作为表类型变量发送。

因为在这种情况下,您可以通过对表类型变量执行JOIN 来执行update-join,并且可以一次更新多条记录。至少,您将保存对数据库的多次调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多