【问题标题】:Scope of "Set rowcount" in SQLSQL中“设置行数”的范围
【发布时间】:2011-07-20 00:26:29
【问题描述】:

我在存储过程中使用“设置行数”。我有一个问题, Set RowCount 的范围是什么?考虑以下 SP

 CREATE PROC Test
    AS 
        BEGIN

            SET ROWCOUNT 10
            ...........

            SET ROWCOUNT 0

        END


CREATE PROC Test2
AS 
    BEGIN


        ...........

        SET ROWCOUNT 0

    END


CREATE PROC Test3
AS 
    BEGIN

        SET ROWCOUNT 10
        ...........


    END


CREATE PROC Test4
AS 
    BEGIN

        SET ROWCOUNT 10
        SET ROWCOUNT 5
        ...........
        SET ROWCOUNT 0      

    END

现在在上述 SP 中,您一定看到我的 SetRowcount 语句不匹配。所以我的问题是,如果我忘记在我的开头“Set RowCount N”语句中添加“Set RowCount 0”怎么办。有必要吗?它会影响我的应用程序中其余 SP 的执行吗?

【问题讨论】:

  • 它似乎会影响子批次,但在退出快速测试时会重置。
  • @Martin 你能帮我清除一下“但在退出快速测试时会被重置”吗?
  • from a quick test 位之前可能应该有一个逗号,以表明它与it seems 相关,而不是与upon exiting 相关,但Martin 没有击键或错过键或以其他方式忽略添加必要的标点符号。 :) 所以我认为这句话的实际意义是:“从快速测试来看,SET ROWCOUNT 语句在 Martin 看来会影响子批次,但在退出 [从存储过程] 时会被重置。 "
  • @Andriy - 哎呀,那句话中的标点符号有缺陷!谢谢。

标签: sql sql-server-2008


【解决方案1】:

据我所知,与accepted answer in the question linked to in the comments 相反,其范围规则与#temp 表可见性的范围规则完全相同。它传播到子批次,但当批次退出时,它会重置为之前的值。

CREATE PROC #bar
AS
SELECT * FROM sys.objects
EXEC ('SELECT * FROM sys.objects')
GO

CREATE PROC #foo
AS
SET ROWCOUNT 1

EXEC #bar
GO

SET ROWCOUNT 4
EXEC #foo /*Returns 2 resultsets with 1 row*/
EXEC #bar /*Returns 2 resultsets with 4 rows*/

DROP PROC #foo
DROP PROC #bar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多