【问题标题】:Getting the ROWCOUNT value (not @@ROWCOUNT) in SQL在 SQL 中获取 ROWCOUNT 值(不是@@ROWCOUNT)
【发布时间】:2011-05-28 23:28:57
【问题描述】:

有没有办法查看 ROWCOUNT 的设置?

用于调用我的存储过程的组件有一个选项来限制返回的行数,但它显然是通过设置 ROWCOUNT 来实现的。一个存储过程只返回一个聚合行,但中间查询有时会返回超过限制并被截断。完成所有这些的函数是通用的,用于调用其他存储过程;我的一些其他程序可能需要限制。

现在我在存储过程的顶部将 ROWCOUNT 设置为一个非常大的数字,然后在返回结果之前将其设置回(硬编码)常规限制。我不维护调用我的存储过程的组件,因此我可能不知道返回的行限制是否已更改。我想做的是将一个局部变量设置为当前的 ROWCOUNT 值,然后在最后将其设置回来。有什么方法可以实际查看 ROWCOUNT 的设置?

【问题讨论】:

    标签: sql sql-server tsql rowcount


    【解决方案1】:

    如果您查询 sys.dm_exec_sessions dmv,它将返回会话中返回的行数(当然应该与 @@rowcount 相同)。

    SELECT row_count FROM sys.dm_exec_sessions
    WHERE session_id = @@spid
    

    你可以试试看是否可以使用它

    现在我在存储过程的顶部将 ROWCOUNT 设置为一个非常大的数字

    你也可以只做SET ROWCOUNT 0,在这种情况下它将返回所有行

    【讨论】:

    • 很高兴知道 SET ROWCOUNT 0,我不确定默认值是什么。我想做的是说 SET ROWCOUNT 500,然后执行 SELECT ROWCOUNT FROM sys.dm_exec_sessions 之类的操作,然后取回 500 号。
    【解决方案2】:

    停止使用SET ROWCOUNT。无论如何,它已被部分弃用。

    使用自 SQL Server 2000 以来一直存在的 TOP:11 年。这是每个查询,不会影响中间行,这意味着您可以在需要时应用它,而不是像现在这样全局应用。

    2012 年 2 月编辑

    SQL Server 2012 too for insert, update and delete之后的下一个版本中将被删除

    【讨论】:

    • 可能是的,但我使用的是 Delphi 7,看来这就是它对 ADO 查询强制执行 MaxRecords 值的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多