系统表master..spt_values的目的是什么?它的值是什么意思?

时间:2010-11-25 04:29:15

标签: sql sql-server database-design configuration

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

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

更新:
Google搜索提供了数千种“其用途”,例如:

3 个答案:

答案 0 :(得分:48)

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

  

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

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

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

该表在MSDN博客的代码片段中也是sometimes used - 但从未在正式文档中 - 通常作为数字列表的方便来源。但正如elsewhere所述,创建自己的数字源比使用未记录的系统表更安全,更可靠。甚至a Connect request在SQL Server本身中提供了“正确的”记录的数字表。

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

答案 1 :(得分:4)

another question中得到了回答。

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

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

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

答案 2 :(得分:0)

一种用法(肯定不是其主要用法)是生成一系列数字:

--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