juu*_*uur 49 sql sql-server stored-procedures metadata sql-server-2008
在SQL Server中,有两种元数据模式:
我听说INFORMATION_SCHEMA表是基于ANSI标准的.在开发例如存储过程时,是否应该INFORMATION_SCHEMA在sys表上使用表格?
Mar*_*ith 32
除非您正在编写一个您知道的应用程序需要可移植的应用程序,或者您只需要非常基本的信息,否则我将默认使用专有的SQL Server系统视图.
该Information_Schema意见只能说明是与SQL-92标准兼容的对象.这意味着即使是非常基本的结构(如索引)也没有信息模式视图(这些结构未在标准中定义,而是作为实现细节保留.)更不用说任何SQL Server专有功能.
此外,它可能不是人们可以假设的便携性的灵丹妙药.实现在系统之间仍然存在差异.Oracle根本没有"开箱即用"地实现它,MySql文档说:
SQL Server 2000的用户(也遵循该标准)可能会注意到强烈的相似性.但是,MySQL省略了许多与我们的实现无关的列,并添加了特定于MySQL的列.其中一个列是INFORMATION_SCHEMA.TABLES表中的ENGINE列.
即使对于面包和黄油SQL构造(例如外键约束),Information_Schema视图的处理效率也远低于sys.视图,因为它们不会公开允许有效查询的对象ID.
例如,查看问题SQL查询从1秒减慢到11分钟 - 为什么?和执行计划.


cod*_*ger 31
我总是尝试使用Information_schema视图sys直接查询架构.
视图符合ISO标准,因此从理论上讲,您应该能够轻松地跨不同的RDBMS迁移任何查询.
但是,在某些情况下,我需要的信息在视图中不可用.
我提供了一些链接,其中包含有关视图和查询SQL Server目录的更多信息.
http://msdn.microsoft.com/en-us/library/ms186778.aspx
http://msdn.microsoft.com/en-us/library/ms189082.aspx
Pet*_*hia 10
INFORMATION_SCHEMA更适合可能需要与各种数据库连接的外部代码.一旦你开始在数据库中编程,可移植性就会消失.如果您正在编写存储过程,那就告诉我您已经致力于特定的数据库平台(无论好坏).如果您已经提交到SQL Server,那么请务必使用这些sys视图.