使用SqlCommand.ExecuteNonQuery,如何获取超过int限制的受影响行数?
问题描述:
我使用C#库SqlCommand.ExecuteNonQuery()
来修改SQL数据库。其中一个脚本可能会修改多于int.Max
行。在这种情况下,该方法返回负值。有没有更好的方法来获得正确的行数int64精度?谢谢。使用SqlCommand.ExecuteNonQuery,如何获取超过int限制的受影响行数?
答
如果您将SELECT @@ROWCOUNT
添加到查询的末尾,请使用SqlCommand.ExecuteScalar
并将其返回到Int64
。 ExecuteNonQuery
返回类型为int
,因此无法直接通过int.Max处理值。
+0
感谢您的建议。不幸的是,我正在处理Azure SQL Datawarehouse,似乎@@ rowcount不被支持......你知道其他想法吗? – weidi
答
添加到您的SQL语句的结尾:
select rowcount_big() as [Affected];
和开关ExecuteNonQuery
与ExecuteScalar
。
答
您可以设置&返回输出参数ExecuteNonQuery如下。
声明@Result BIGINT输出
SET @Result = @@ ROWCOUNT
int.Max是'2,147,483,647'需要执行多长时间? –
@不幸运大概需要1个小时。 – weidi
我总是页面这些类型的脚本。我称它为多个时间段来记录下一个块。它有几个优点。您可以向用户报告进度。您可以保持事务日志很小。您避免超时。 –