列系统表(sys.columns,sys.all_columns等)如何描述自己?

时间:2012-12-02 05:52:32

标签: sql-server database database-design metadata

我在SQL Server 2008中注意到sys.all_columns表包含自己的列。怎么可能?这似乎是一个鸡/蛋问题 - 如果没有先读取sys.all_columns,SQL Server如何确定sys.all_columns的列,这需要知道该表的列是什么?

另外,这是常见的吗?其他数据库系统是否这样做?

2 个答案:

答案 0 :(得分:2)

sys.all_columns和sys.columns不是表,它们是视图。实际上,sys.all_columns是sys.system_columns和sys.columns的组合。

它们全部重新组合成一个基表,我非常确定微软更喜欢人们不要乱用。

您可以在此处了解有关系统基表的更多信息:https://msdn.microsoft.com/en-us/library/ms179503.aspx

答案 1 :(得分:0)

它可以运行初始查询,然后查询自己的新列并获取联合。实际上,初始查询本身描述了查询运行之前的列。这就是您无法使用未命名列定义视图的原因。