【发布时间】:2011-08-27 22:50:32
【问题描述】:
SQL Server 文档here 说information_schema.tables 的table_schema 字段“不可靠”,获取对象架构的正确方法是查询sys.objects。
谁能详细说明information_schema.tables 报告的架构如何和何时可能不正确?
【问题讨论】:
-
查看
EXEC sp_helptext 'INFORMATION_SCHEMA.TABLES'的输出,这确实使用sys.objects,所以看起来很奇怪。 -
从技术上讲,在 SQL Server 2000 中,此列报告了对象的所有者,而不是其架构,尽管在 2000 年这个概念无论如何是可以互换的。除非跨 RDBMS 可移植性是重中之重,否则我强烈建议对元数据使用
sys目录视图而不是INFORMATION_SCHEMA,主要是因为前者将针对新功能进行扩展,但后者相对停滞不前。 (例如,尝试使用INFORMATION_SCHEMA查找过滤索引。) -
@Martin 您是否注意到它执行
LEFT JOIN?在我看来,这表明在某些情况下架构可能无效(无法想象这一点)。但是警告信息(语法不正确等等)意义不大,因为这意味着sys.objects指向的sys.schemas中的行也是无效的,那么如何使用sys.objects(或者更合适的sys.tables) 给你比INFORMATION_SCHEMA更可靠的东西吗? -
@Aaron - 如果数据库已从 SQL Server 2000 升级,并且已使用任何新的 DDL 语句,
sys.sysobjects中的架构信息可能是错误的as described here。也许他们只是对一些太多的事情发出警告? -
@all,感谢 cmets。
标签: sql-server information-schema