【问题标题】:integer Max value constants in SQL Server T-SQL?SQL Server T-SQL中的整数最大值常量?
【发布时间】:2023-03-07 09:16:01
【问题描述】:

T-SQL 中是否有像其他语言一样提供 int 等数据类型的最大值和最小值范围的常量?

我有一个代码表,其中每一行都有一个上限和下限列,我需要一个表示一个范围的条目,其中上限是 int 可以容纳的最大值(有点像 hackish 无穷大)。我不想硬编码,而是使用SET UpperRange = int.Max

【问题讨论】:

标签: sql sql-server sql-server-2005 tsql


【解决方案1】:

有两种选择:

  • 用户定义的标量函数
  • 属性表

在 Oracle 中,您可以在包中执行此操作 - 最接近 SQL Server 的是程序集...

【讨论】:

  • 这个属性表是什么?我用谷歌搜索了一段时间,但没有得到任何东西,因此我可以在表的属性中定义一些常量值(从它的名字听起来),它可以用来表示 int.MaxValue。你能帮我提供一些链接或详细信息吗?
  • @RBT 他的意思是你可以创建一个表并为不同的最小/最大值输入条目,然后查询该表。
【解决方案2】:

我认为没有任何已定义的常量,但您可以通过将值存储在表中或使用标量值函数来自己定义它们。

表格

设置一个包含三列的表:TypeName、Max 和 Min。这样,您只需填充一次。

标量值函数

例如,您也可以使用标量值函数 GetMaxInt()(有关真实示例,请参阅此 StackOverflow answer

您可以在此处找到所有最大值/最小值:http://msdn.microsoft.com/en-us/library/ms187752.aspx

【讨论】:

    【解决方案3】:

    避免像瘟疫一样的标量函数:
    Scalar UDF Performance Problem

    话虽如此,我不会使用另一个人建议的 3 列表。
    这将导致几乎在您使用它的任何地方都进行隐式转换。
    如果您需要将它用于多种类型,您还必须多次加入该表。

    而是为每个数据类型的每个最小值和最大值(使用它自己的数据类型定义)设置一列,然后直接调用它们进行比较。

    示例:

    SELECT *
      FROM SomeTable as ST
      CROSS JOIN TypeRange as TR
      WHERE ST.MyNumber BETWEEN TR.IntMin  AND TR.IntMax
    

    【讨论】:

    • 您可以只调用一次标量函数,将结果分配给变量并将其用作查询中的“常量”。但你是对的。无论如何:避免为每个数据行调用标量函数。如果您有大量数据,这才是真正的性能杀手。
    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2016-03-27
    相关资源
    最近更新 更多