什么是系统表master..spt_values的目的,什么是它的值的含义?

Gen*_*нин 59 sql sql-server configuration database-design

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

它的类型,低值,高值的含义是什么?

更新:
Google搜索提供了数千个"其用途",例如:

Pon*_*ife 51

spt_valuesSQL Server文档中未提及该表,但它可以追溯到Sybase时代,Sybase在线文档中有一些极少的文档可以在此注释中总结:

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

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

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

该表有时也用于 MSDN博客中的代码片段 - 但从未在正式文档中使用 - 通常作为数字列表的方便来源.但正如其他地方所讨论的那样,创建自己的数字源比使用未记录的系统表更安全,更可靠.甚至还有一个Connect请求,用于在SQL Server本身中提供"正确"的文档编号表.

无论如何,该表完全没有文档,因此至少从实际角度来看,了解它的任何内容都没有重要价值:下一个servicepack或升级可能会完全改变它.知识分子的好奇心当然是另一回事:-)

  • @PerformanceDBA:正如我所说的,我认为你可能是正确的,但要解决你的具体问题:微软已经修改了许多系统过程来使用新的DMV而不是旧的系统表,所以显然代码并不是一成不变的并且随着版本的变化而积极维护.如果他们可以用一个sys.database_principals替换对dbo.sysusers的引用,那么他们当然可以更改对spt_values的引用.当然,他们是否曾经是纯粹的猜测(我不为微软工作). (12认同)
  • 我没有投票给你.我不同意一个陈述.这是不值得争论的,因为你拒绝解释我的观点,即MS在他们的系统存储过程中大量使用**,因此删除将需要写入,这可能是一个雪球在地狱中的机会.阅读我的其他答案了解更多详情.无法保证MS将来会存在;-) (5认同)
  • 它被系统sprocs大量使用,没有变化的机会. (4认同)
  • @PerformanceDBA:你可能是对的(毕竟,桌子大概是从版本4.x或更早版本一直到2008年),但这仍然不能保证微软将来不会改变它.依赖于未记录的功能总是存在一些风险,即使它很小. (3认同)
  • 顺便说一句,下一个服务包没有改变任何东西。在接下来的 10 年里也没有任何其他更新哈哈 (2认同)

Per*_*DBA 5

大多在另一个问题中回答

它的类型、低值、高值的含义是什么?

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

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