【问题标题】:SET NO Count ON in SQl Server Causes an issue with ExecuteNonQuerySQl Server 中的 SET NO Count ON 导致 ExecuteNonQuery 出现问题
【发布时间】:2015-05-15 11:37:00
【问题描述】:

根据我见过的大部分SQL文本

SET NoCount ON

添加到数据库性能和 DBA 不喜欢看到它关闭。

但是在我正在处理的 ASP.NET 中,这会导致

使用ExecuteNonQuery 调用存储过程总是导致-1。

这是一个已知问题吗?如果是,解决方法是什么?

所以问题是SET NoCount ON 然后ExecuteNonQuery 返回受影响的行数。

此问题仅针对“ExecuteNonQuery”。我知道我可以使用ExecuteScalar 并获得@@RowCount

【问题讨论】:

  • 查询内容是什么?你怎么称呼它?
  • 你的意思是ExecuteNonQuery 对吧?
  • 是的,编辑了我的问题。 tnx.
  • @artm 任何插入删除的简单存储过程。
  • 根据NoCount 的文档,如果必须打开它,您唯一的选择是使用@@RowCount

标签: c# asp.net sql-server vb.net


【解决方案1】:

你还期待什么?你明确告诉数据库计算行数,然后你问为什么没有返回计算的行数?

数据库没有提供受影响的行数,因为你关闭了它。这既不是问题也不是错误,这就是您所做的全部重点。

【讨论】:

  • 是的,我希望我可以删除该行。但是,这对我未来的数据库性能有影响吗?
  • 这不会是数据库的性能问题,因为它不是全局的。这是您真正想要打开而不是关闭的一种情况。
  • 好吧,我想这就是它。我必须停止使用 ExecuteNonQuery。
  • @SNash 通常NoCount 的点是用于具有多个语句或特别是循环中的语句的过程。如果你只是做一个声明,我怀疑会有很大的性能差异。尤其是因为您仍然希望将这些信息发送给您。
【解决方案2】:

由于您要求数据库不要返回该信息,因此它完全按照您所说的进行。

您可以尝试在查询前加上 SET NOCOUNT OFF 并在后缀上加上 SET NOCOUNT ON 以获取特定案例的行数

【讨论】:

  • Set NoCount 不会更改全局默认值。它只影响当前程序,因此您不必在程序结束时恢复设置。
猜你喜欢
  • 2015-06-23
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2019-11-20
  • 2011-03-05
相关资源
最近更新 更多