system table master..spt_values的目的是什么? 为什么提供它以及如何使用它?
它的类型,低值,高值的含义是什么?
更新: Google搜索提供了数千种“其用途”,例如:
SQL Server文档中没有提到spt_values
表,但它可以追溯到Sybase时代,Sybase在线文档中有一些extremely minimal documentation可以在这篇评论中总结出来:
要查看它是如何使用的,请执行sp_helptext并查看引用它的系统过程之一的文本。
换句话说,阅读代码并自己解决。
如果您查看系统存储过程并检查表数据本身,则可以很清楚地使用该表将代码转换为可读字符串(以及其他内容)。或者,正如上面链接的Sybase文档所说,“将内部系统值[...]转换为人类可读的格式”
该表也是MSDN博客中代码片段中的sometimes used - 但从未在正式文档中 - 通常作为数字列表的方便来源。但正如elsewhere所讨论的那样,创建自己的数字源比使用未记录的系统表更安全,更可靠。甚至还有a Connect request在SQL Server本身提供一个“正确的”记录的数字表。
无论如何,该表完全没有文档,因此至少从实际角度来看,了解它的任何内容都没有重要价值:下一个servicepack或升级可能会完全改变它。知识分子的好奇心当然是另一回事:-)
在another question回答。
它的类型,低值,高值的含义是什么?
大多数类型(即每个特定的查找表,如果它们是分开的)需要名称或数字。某些类型也需要低和高列。在Sybase中,我们有一个ErrorNumber列,因此sproc可以是RAISERROR,它不是硬编码的(可以随版本更改等)。
它不是“神秘的”,除非列举的列表对你来说是“神秘的”;它只是一个查找表(所有这些表,由Type列区分)。
一种用法,绝对不是它的主要用途,是生成一系列数字:
--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