【问题标题】:Overriding rows affected in SQL Server using ExecuteNonQuery?使用 ExecuteNonQuery 覆盖 SQL Server 中受影响的行?
【发布时间】:2010-01-07 18:11:00
【问题描述】:

我有一个插入语句,它将一些数据提取到几个表变量中,然后根据该数据对几个表进行一些插入。我只关心插入真实表的行而不关心表变量,但 ExecuteNonQuery 将返回所有 @@ROWCOUNT 的总和。我想知道有没有办法覆盖使用 ExecuteNonQuery 返回的行数?

我知道我可以使用 ExecuteScalar 或输出变量作为替代。

下面是一个简单的例子:

CREATE TABLE VersionExample ( Version Varchar(255) )  

Declare @RowCountICareAbout int

DECLARE @Example TABLE ( Version Varchar(255) )  

INSERT INTO @Example Select @@VERSION

INSERT INTO VersionExample SELECT Version FROM @Example

SET @RowCountICareAbout = @@ROWCOUNT

--Use @RowCountICareAbout as the rows affected returned to ExecuteNonQuery

【问题讨论】:

  • 我不知道 - 它是一个内置变量...听起来您回答了自己的问题...使用输出变量。

标签: .net sql-server sql-server-2008 ado.net


【解决方案1】:

不知道这是否可行,但您是否尝试过 SET NOCOUNT ON(然后在最终查询之前 SET NOCOUNT OFF)?

更新:这篇博文和 cmets 似乎表明这确实有效:

http://petesbloggerama.blogspot.com/2006/10/note-to-self-set-nocount-on-not.html

【讨论】:

  • 确实,在表变量插入语句之前 SET NOCOUNT ON 并在它们工作后将它们从最终计数中排除。
【解决方案2】:

不,在 ADO.NET 或 SQL Server 中无法覆盖或更改该行为。

您唯一的选择是捕获您感兴趣的行数并将它们放入变量中并返回它们。

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2017-10-12
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2022-01-16
    相关资源
    最近更新 更多