【问题标题】:Is there a better approach than a SQL Stored Procedure?有比 SQL 存储过程更好的方法吗?
【发布时间】:2011-10-27 17:18:02
【问题描述】:

我创建了一个存储过程GetNotifications,它返回特定用户的所有通知。其他开发人员正在许多不同的地方使用此 SP。

现在我们需要实现分页功能,这样我们就不会同时向用户发送所有通知。

我无法修改现有的 SP,因为它正在被使用。

我可以创建另一个带有分页功能的 SP,但我真的不想这样做,因为它需要大量重复的代码,当然如果我们将来更改业务逻辑以获取通知,那会很糟糕。

这是我可以做的:创建一个内部调用GetNotifications 的新SP,然后在返回的结果集上实现分页。但是,由于GetNotifications 无论如何都会返回所有结果,因此不会对服务器造成不必要的负载吗?

你能想出更好的方法来解决这个问题吗?

【问题讨论】:

  • 能否将查询的核心部分重构为视图或表值函数?

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


【解决方案1】:

使用可选参数修改存储过程以返回分页功能或所有结果(默认值)。这应该会在不破坏现有代码的情况下为您提供所需的功能。

【讨论】:

    【解决方案2】:

    拥有一个接受 2 个参数的存储过程:@PageNumber、@RowsPerPage

    如果两个参数都传入 0,则返回所有行,否则进行分页。

    更新您现有的代码以为 args 传递 0/0,然后您的新代码可以在需要分页时传递实际值。

    按照 cmets 中的建议,如果您为参数指定默认值 0/0,您甚至不需要更新现有代码。

    【讨论】:

    • 如果您在最后添加变量并为将全部返回的变量设置默认值,您甚至不必修改调用 proc 的现有代码..
    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多