只获取更新查询的结果

Posted

技术标签:

【中文标题】只获取更新查询的结果【英文标题】:Get only result of update query 【发布时间】:2014-07-25 12:45:50 【问题描述】:

当我对我的 SQL Server 数据库执行更新时,我得到了受更新影响的行的结果AND某些触发器的受影响行。

例如,直接在数据库上执行更新:

UPDATE: (32 row(s) affected)
Trigger1: (1 row(s) affected)
Trigger2: (2 row(s) affected)
...

现在,当我执行_context.Database.ExecuteSqlCommand(query, params) 时,我总是得到所有这些结果的总和,在我的示例中,结果值为35

我只需要UPDATE 的结果,在我的示例中为32

是否有可能忽略触发器的结果?

【问题讨论】:

【参考方案1】:

SET NOCOUNT ON 放在触发器的第一行。

【讨论】:

我无法更改触发器,否则这将是一个不错的解决方案。 这是因为权限吗?还是有其他原因? 是的,它是一个大数据库,被多个程序使用。所以这并不容易;-) 好的。我懂了。所以这很难,但并非完全不可能。我在想别的办法。 恳求这是可能的。但尽管如此,我更喜欢其他解决方案。【参考方案2】:

如果可以更改触发器,我认为@Alireza 的回答最有意义,但如果不能更改数据库调用以执行更新语句并返回@@ROWCOUNT

_context.Database.SqlQuery<int>("update xx ...; select @@ROWCOUNT");

我在 MSDN 上找不到任何文档,但 this question 确认 @@ROWCOUNT 不受触发器影响。

【讨论】:

好主意,我会试试的! 对于这种特殊情况,这可能是一个更好的解决方案 是的,在我的情况下是肯定的。否则,更清洁的解决方案是你的@Alireza 当然,我们是来解决your 问题的。没有其他人的:)

以上是关于只获取更新查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

获取父级mysql的所有子级一个查询5.6

如何从子查询中只获取一行?

C#:DataTable 只获取搜索结果的一行

如何在elasticsearch中为给定查询按字段获取不同的结果?

SQL 查询以获取特定对象的最新操作/更新

当我只需要知道是不是超过 1 时,如何优化获取结果计数?