【问题标题】:How to get number of rows affected by ExecuteNonQuery and ignore rows of triggers?如何获取受 ExecuteNonQuery 影响的行数并忽略触发器行?
【发布时间】:2015-11-19 00:56:38
【问题描述】:

我正在使用ExecuteNonQuery 运行插入过程,它返回 2,但实际上我只插入了 1 条记录。由于触发,我得到了额外的 1 个。无论如何,我只得到受影响的实际行数。我不希望受触发器影响的行。

【问题讨论】:

标签: c# sql-server c#-4.0 enterprise-library executenonquery


【解决方案1】:

如果您还没有,请禁用触发器中的行计数:

SET NOCOUNT ON   

例如:

CREATE TRIGGER [dbo].[triggerName] ON [dbo].[TableName]
AFTER INSERT
AS
SET NOCOUNT ON;
......

MSDN

【讨论】:

  • 蒂姆我想清除一件事 SET NOCOUNT ON 不会返回任何计数吗??
  • @tinka:如果触发器有SET NOCOUNT ON,则不计算受影响的行。但是如果插入三行 ExecuteNoQuery 仍然返回 3。
  • 我正在创建自己的查询生成器。它可以运行任何类型的查询,并且在我的数据库中有数千个表和许多触发器。那么是否需要将所有触发器更改为忽略计数?
  • @girishgupta211:这将是一个好方法。建议在触发器中设置 NOCOUNT ON,它也可以提高性能(Reza has mentioned 也是如此)。否则无法忽略触发器受影响的行数。当然,您可以将查询更改为如下所示:insert into dbo.TableName Values('B'); select @@ROWCOUNT"; 并使用(int)ExecuteScalar。但是它可能是不正确的,因为它只返回最后一条语句的行数。这将忽略触发器。
  • 感谢蒂姆·施梅尔特。让我试试这个方法。
【解决方案2】:

请参考下面提到的图片

但是,有关此功能的 MSDN 文章指出: 对于 UPDATE、INSERT 和 DELETE 语句,返回值为数字 的 受命令影响的行。对于所有其他类型的语句, 返回 值为-1。如果发生回滚,返回值也是-1。

看... enter link description here

【讨论】:

  • 这个答案如何帮助避免受触发器影响的行不被计算在内?
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2011-10-03
  • 2012-02-04
  • 2019-04-24
相关资源
最近更新 更多