【问题标题】:With SqlCommand.ExecuteNonQuery, how to get affected row count that exceeds int limit?使用 SqlCommand.ExecuteNonQuery,如何获得超过 int 限制的受影响行数?
【发布时间】:2017-03-07 05:51:06
【问题描述】:

我正在使用 C# 库 SqlCommand.ExecuteNonQuery() 来修改 SQL 数据库。其中一个脚本可以修改超过int.Max 行。在这种情况下,该方法返回负值。有没有更好的方法来获得 int64 精度的正确行数?谢谢。

【问题讨论】:

  • int.Max 是2,147,483,647 执行需要多长时间?
  • @un-lucky 大约需要 1 小时。
  • 我总是分页这类脚本。我多次称它为下一个记录块。它有几个优点。您可以向用户报告进度。您可以保持事务日志较小。您可以避免超时。

标签: c# sql .net sql-server


【解决方案1】:

如果您将SELECT @@ROWCOUNT 添加到查询末尾,则使用SqlCommand.ExecuteScalar 并将其返回到Int64ExecuteNonQuery 的返回类型为 int,因此无法直接处理超过 int.Max 的值。

【讨论】:

  • 感谢您的建议。不幸的是,我正在处理 Azure SQL 数据仓库,似乎不支持 @@rowcount ......你知道其他想法吗?
【解决方案2】:

将此添加到 SQL 语句的末尾:

select rowcount_big() as [Affected];

然后将ExecuteNonQuery 切换为ExecuteScalar

【讨论】:

    【解决方案3】:

    您可以使用 ExecuteNonQuery 设置和返回输出参数,如下所示。

    声明@Result BIGINT 输出

    SET @Result = @@ROWCOUNT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 2011-08-27
      • 2011-10-03
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2014-10-01
      相关资源
      最近更新 更多