【问题标题】:What is the purpose of system table master..spt_values and what are the meanings of its values?系统表 master..spt_values 的用途是什么,其值的含义是什么?
【发布时间】:2011-05-15 11:53:15
【问题描述】:

系统表master..spt_values的用途是什么?
为什么提供它以及应该如何使用它?

它的类型,低值,高值是什么意思?

更新:
谷歌搜索给出了数以千计的“它的用途”,例如:

【问题讨论】:

    标签: sql sql-server database-design configuration


    【解决方案1】:

    一种用法,绝对不是它的主要用法,是生成一系列数字:

    --Generate a series from 1 to 100
    SELECT
        TOP 100
        ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RowNum
    FROM master.dbo.spt_values ORDER BY RowNum
    

    【讨论】:

      【解决方案2】:

      spt_values 表在 SQL Server 文档中没有提及,但它可以追溯到 Sybase 时代,并且 Sybase 在线文档中有一些 extremely minimal documentation 可以总结在此评论中:

      要查看它是如何使用的,请执行 sp_helptext 并查看文本 引用它的系统过程之一。

      换句话说,阅读代码并自己解决。

      如果您浏览系统存储过程并检查表数据本身,很明显该表用于将代码转换为可读字符串(以及其他内容)。或者正如上面链接的 Sybase 文档所说,“将内部系统值 [...] 转换为人类可读的格式”

      该表在 MSDN 博客的代码 sn-ps 中也是 sometimes used - 但从未出现在正式文档中 - 通常作为数字列表的方便来源。但正如elsewhere 所讨论的,创建自己的数字源是比使用未记录的系统表更安全、更可靠的解决方案。甚至还有 a Connect request 在 SQL Server 本身中提供一个“正确的”、记录在案的数字表。

      无论如何,该表完全没有文档记录,因此至少从实际的角度来看,了解它没有任何意义:下一个服务包或升级可能会完全改变它。当然,求知欲是另一回事:-)

      【讨论】:

      • 它被系统存储程序大量使用,没有机会改变它。
      • @PerformanceDBA:您可能是对的(毕竟,该表可能从 4.x 或更早版本一直到 2008 年一直存在),但这仍然不能保证 Microsoft 会赢。将来不要改变它。依赖未记录的特性总是有一些风险,即使它很小。
      • 我没有投票给你。我不同意一种说法。这不值得争论,因为您拒绝解决我的观点,即 MS 在他们的系统存储过程中大量使用它,因此删除将需要编写那些,这就像滚雪球一样地狱的机会。阅读我的另一个答案以获取更多详细信息。不能保证 MS 将来会存在 ;-)
      • @PerformanceDBA:正如我所说,我认为您可能是对的,但为了解决您的具体问题:Microsoft 已经修改了许多系统过程以使用新的 DMV 而不是旧的系统表,所以显然代码不是一成不变的,并且随着版本的变化而积极维护。如果他们可以将 dbo.sysusers 的引用替换为对 sys.database_principals 的引用,那么他们当然可以更改对 spt_values 的引用。当然,他们是否会这样做纯属猜测(我不为微软工作)。
      • 下一个服务包并没有改变任何东西。在接下来的 10 年内也没有任何其他更新,哈哈
      【解决方案3】:

      大部分回复在another question

      它的类型、低、高值是什么意思?

      大多数类型(即每个特定的查找表,如果它们是单独的)需要名称或编号。某些类型也需要 Low 和 High 列。在 Sybase 中,我们有一个 ErrorNumber 列,因此 sproc 可以 RAISERROR 非硬编码(可以随版本等而变化)。

      除非枚举列表对您来说是“神秘的”,否则它不是“神秘的”;它只是一个查找表(所有这些,由 Type 列区分)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2011-12-17
        • 2010-11-21
        • 1970-01-01
        相关资源
        最近更新 更多