【问题标题】:Select Last (first) rows of a table in Stored Procedure using parameter (SQL 2008)使用参数选择存储过程中表的最后(第一)行(SQL 2008)
【发布时间】:2009-10-31 20:46:22
【问题描述】:

我正在尝试创建一个使用

的存储过程

从 tblRecords 中选择 TOP 20 * ....

我希望将返回的行数作为参数发送到过程。

由于某种原因,它说我使用的参数附近有语法错误:

从 tblRecords 中选择 TOP @PARAM ....

有没有直接的方法,或者我需要使用字符串连接构造语句并执行它....

【问题讨论】:

    标签: sql stored-procedures parameters


    【解决方案1】:

    试试:

    SELECT TOP (@PARAM) * from tblRecords ....
    

    MSDN 建议始终使用括号,支持它但不向后兼容:

    ...For backward compatibility, TOP expression without parentheses in SELECT statements is supported, but we do not recommend this.

    【讨论】:

    • 知道这与常规使用参数有何不同吗?
    • 我知道,我的代码中有它。我想知道为什么我不需要在其他地方使用 () 和@params ....
    • 嗯,MSDN 并不准确,因为我们可以看到在 select 中它不能正常工作 - 在 SP 中。
    • 10 倍的快速启发式响应!
    【解决方案2】:

    在存储过程中,在进行选择之前,发出:

    SET ROWCOUNT @param
    

    这会将返回的行数限制为@param。

    查询后,设置回0:

    SET ROWCOUNT 0
    

    【讨论】:

    • 如果我不将它重置回 0 会发生什么?
    • 查询将@param 行,直到您重置它。 Najmeddine 的回答似乎有效,那肯定更好。
    • 这个解决方案也更加向后兼容不支持 TOP((@Param) 语法的早期 SQL 版本
    • @JohnFX:我现在不担心向后兼容......来吧,现在是 2009 年的 SQL 2008 R2
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多