我在 SQL Server 2008 中注意到 sys.all_columns 表包含自己的列。这怎么可能?这似乎是一个先有鸡还是先有蛋的问题——SQL Server 如何在不首先读取 sys.all_columns 的情况下确定 sys.all_columns 的列,这需要知道该表的列是什么?
另外,这很常见吗?其他数据库系统会这样做吗?
我在 SQL Server 2008 中注意到 sys.all_columns 表包含自己的列。这怎么可能?这似乎是一个先有鸡还是先有蛋的问题——SQL Server 如何在不首先读取 sys.all_columns 的情况下确定 sys.all_columns 的列,这需要知道该表的列是什么?
另外,这很常见吗?其他数据库系统会这样做吗?
sys.all_columns 和 sys.columns 不是表,它们是视图。实际上,sys.all_columns 是 sys.system_columns 和 sys.columns 的组合。
它们都与一个基表相关联,我很确定微软更喜欢人们不要乱来。
您可以在此处了解有关系统基表的更多信息:https ://msdn.microsoft.com/en-us/library/ms179503.aspx
它可以运行初始查询,然后向自身查询新列并采用联合。但实际上,初始查询本身描述了查询运行之前的列。这就是为什么您不能定义具有未命名列的视图的原因。