使用SqlCommand.ExecuteNonQuery,如何获取超过int限制的受影响行数?

问题描述:

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

+1

int.Max是'2,147,483,647'需要执行多长时间? –

+0

@不幸运大概需要1个小时。 – weidi

+0

我总是页面这些类型的脚本。我称它为多个时间段来记录下一个块。它有几个优点。您可以向用户报告进度。您可以保持事务日志很小。您避免超时。 –

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

+0

感谢您的建议。不幸的是,我正在处理Azure SQL Datawarehouse,似乎@@ rowcount不被支持......你知道其他想法吗? – weidi

添加到您的SQL语句的结尾:

select rowcount_big() as [Affected]; 

和开关ExecuteNonQueryExecuteScalar

您可以设置&返回输出参数ExecuteNonQuery如下。

声明@Result BIGINT输出

SET @Result = @@ ROWCOUNT