【问题标题】:Alternatives to hard coding values in stored procedures SQL Server 2008R2存储过程 SQL Server 2008R2 中硬编码值的替代方法
【发布时间】:2018-04-04 19:23:21
【问题描述】:

当用户请求添加/删除数字(1、2、5 等)时,我想避免修改存储过程。我考虑添加可以保存这些值的数据表。

数据表的问题:单个数字与数据表配合得很好,但是当我处理一系列数字时,我无法找到易于维护且性能出色的理想解决方案。

where 子句中的帐号示例:

  • 0 到 39000 之间
  • 80000和80299之间
  • 46000(只加一个数字)
  • 2801(只加一个数字)

我的 WHERE 子句示例:

WHERE
(
Account.Account  BETWEEN  '00000'  AND  '39999'
OR Account.Account BETWEEN '80000' AND  '80299'
OR Account.Account IN ('46000')
OR Account.Account IN ('02801')
)

【问题讨论】:

    标签: function stored-procedures sql-server-2008-r2 range


    【解决方案1】:

    我有一个问题。你的条件可以改变吗?我所说的条件是指整个条件,而不仅仅是数字。根据答案,您有两种情况:

    案例 1:您的情况没有改变。只有数字可以

    喜欢:

    WHERE
    (
    Account.Account  BETWEEN  '00500'  AND  '00578'
    OR Account.Account BETWEEN '80000' AND  '80299'
    OR Account.Account IN ('00700')
    OR Account.Account IN ('08534')
    )
    

    在这种情况下,您可以将此数字作为参数传递,如下所示

    WHERE
    (
    Account.Account  BETWEEN  @lowerlimit1  AND  @upperlimit1
    OR Account.Account BETWEEN @lowerlimit2  AND  @upperlimit2
    OR Account.Account IN (@case1)
    OR Account.Account IN (@case2)
    )
    

    案例 2:您的情况确实发生了变化

    喜欢:

    WHERE
    (
    Account.Account  BETWEEN  '00500'  AND  '00578'
    OR Account.Account IN ('08534')
    )
    

    在这种情况下,最好的选择是使用以下条件中给出的数字创建一个配置表

    WHERE
    (
    Account.Account IN (SELECT Numbers FROM ConfigurationTable)
    )
    

    希望对你有帮助

    【讨论】:

    • 我编辑了我的问题。如果您有其他问题或需要更多详细信息,请告诉我。
    • 编辑了我的答案!。让我知道它是否有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多