【问题标题】:Count number of rows edited by Stored Proc计算存储过程编辑的行数
【发布时间】:2013-07-03 16:21:48
【问题描述】:

我们在 MSSQL Server 2008 数据库中有一个存储过程,它执行大量读取和写入以响应用户在网站上的操作。 我想知道是否有任何方法可以计算在该过程中编辑/创建了多少行,最好不必更改 proc(尽管可以更改)。 有没有人有什么建议?我查看了@@ROWCOUNT,但这涵盖了读取和写入(而且我不希望通过 proc 并在每次更新后手动添加 ROWCOUNT)

编辑:使用 System.Data.SqlClient 类从 C# 调用 proc

【问题讨论】:

  • 我认为这将是唯一的方法 - 创建一个 @ChangeCt 变量并在每个语句之后将其递增 @@ROWCOUNT
  • @@ROWCOUNT 仅根据上次运行语句为您提供答案,因此只会报告存储过程中发生的最后一个操作
  • 你用什么来调用存储过程?我假设您只是没有通过 SSMS 运行它,那么您使用什么语言/库来调用它?爪哇? C#?

标签: sql sql-server-2008 stored-procedures


【解决方案1】:

如果不编辑 proc,最好的办法是启动 SQL Server Profiler 会话,跟踪 SP:StmtCompleted,将 ObjectName 过滤到您的 proc,然后将 TextData 过滤到要监视的语句。请务必包含 RowCount 列。

请注意,您无法从extended events sql_statement_completed 事件中获取行数。没有行数列;只是持续时间、CPU、读取和写入。

如果您可以编辑过程,您将完全控制行为。您可以总结每个 INSERT/UPDATE/DELETE 操作的@@ROWCOUNT。此计数可以作为输出参数返回、写入日志、打印、使用user-defined trace events 跟踪、保存到表等。

【讨论】:

  • 那么,是否有任何版本的 SQL,其中扩展事件捕获 RowCount ?
【解决方案2】:

MS Sql Profiler 是您想要开始进行此类操作的地方。

【讨论】:

    【解决方案3】:

    @@ROWCOUNT 将根据上次运行语句为您提供计数,因此您可以创建一个局部变量并在每次使用 @@ROWCOUNT 后更新它

    否则,您将不得不进入 Profiler 并从那里观察,但这不是一个可持续的解决方案,更适合故障排除。

    【讨论】:

      【解决方案4】:

      我不知道 MySQL,但是 Oracle SQL 提供了一个名为 SQL%ROWCOUNT 的变量,其中包含在前一个事务中影响的行数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2015-05-11
        • 1970-01-01
        相关资源
        最近更新 更多