充分利用SQL Server Information Schema视图

日期: 2011-06-23 作者:Robert Sheldon翻译:包春霞 来源:TechTarget中国 英文

Information Schema视图是SQL Server中访问元数据的几种方法之一。通过这个视图可以检索存储在数据库中的数据对象的元数据。例如,你可以使用Sql Server Information Schema视图访问表的详细信息,如列的数据类型,是否可为空、缺省值等。   Information Schema视图从SQL Server 2005开始支持,自动加入数据库中名叫Information_Schema的Schema,它是特别为视图而创建的。

Information Schema视图和Catalog View检索的内容有部分是相同的信息类型,但不是作为扩展信息。不过,Inform……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Information Schema视图是SQL Server中访问元数据的几种方法之一。通过这个视图可以检索存储在数据库中的数据对象的元数据。例如,你可以使用Sql Server Information Schema视图访问表的详细信息,如列的数据类型,是否可为空、缺省值等。

  Information Schema视图从SQL Server 2005开始支持,自动加入数据库中名叫Information_Schema的Schema,它是特别为视图而创建的。Information Schema视图和Catalog View检索的内容有部分是相同的信息类型,但不是作为扩展信息。不过,Information Schema视图与国际标准化组织ISO的协议是一致的。这意味着这个视图所用的命名惯例是与SQL标准一致的。如果你的应用代码是基于不同的SQL Server版本或者其他数据库管理系统的,那就使用Information Schema视图。

  以下表列出视图所用的主要的ISO兼容对象的名字,以及这些名字与SQL Server中的对象之间的对应关系。

SQL standard object nameSQL Server object name
catalogdatabase
schemaschema
objectobject
domainuser-defined data type

  你可以用SQL Server Information Schema视图来访问数据库对象的元数据,例如表,列,视图,参数,权限,约束和其他对象类型。为了访问这些信息,参考你或者其他用户定义的表或视图。例如,在以下Select语句中,我通过Columns Information Schema 视图查询特定列的信息。

  USE AdventureWorks2008;
  GO
  SELECT
  COLUMN_NAME,
  DATA_TYPE,
  IS_NULLABLE,
  COLUMN_DEFAULT
  FROM
  INFORMATION_SCHEMA.COLUMNS
  WHERE
  TABLE_NAME = 'Employee';

  注意,我先改变当前数据库为AdventureWorks2008(本文中所有的例子都是用的SQL Server2008的本地实例中的这个样例数据库)。然后我用Select语句访问这个视图。在这个例子中,From从句中是我在访问的这个视图,就象访问一个表或任何其他视图一样。因为SQl Server Information Schema视图是在Information_schema中定义的,你必须要在视图名前面加上Schema的名字,就象这样写:INFORMATION_SCHEMA.COLUMNS

  Schema和数据库名

  你也能在视图和模式名中包括数据库名,这种情况就不必使用Use Database语句了。

  上例中也在Select列表中列出了几个视图的列。你能参考SQL Server在线文档中检索这些特定的主题,找到视图中每个列的名字和描述。我也通过where从句,限制table_name=’employee’来限制返回的结果。以下结果也表明有select语句所返回的特定员工的数据。

COLUMN_NAMEDATA_TYPEIS_NULLABLECOLUMN_DEFAULT
BusinessEntityIDintNONULL
NationalIDNumbernvarcharNONULL
LoginIDnvarcharNONULL
OrganizationNodehierarchyidNONULL
OrganizationLevelsmallintNONULL
JobTitlenvarcharNONULL
BirthDatedateNONULL
MaritalStatusncharNONULL
GenderncharNONULL
HireDatedateNONULL
SalariedFlagbitNO((1))
VacationHourssmallintNO((0))
SickLeaveHourssmallintNO((0))
CurrentFlagbitNO((1))
rowguiduniqueidentifierNO(newid())
ModifiedDatedatetimeNO(getdate())

  你能很容易通过任何其他information Schema视图检索元数据。例如,在以下Select语句中,我使用tables视图来检索HumanResource 模式下的每个表的类型和名字。

  USE AdventureWorks2008;
  GO
  SELECT
  TABLE_NAME,
  TABLE_TYPE
  FROM
  INFORMATION_SCHEMA.TABLES
  WHERE
  TABLE_SCHEMA = 'HumanResources';

  再者,我先确保AdventureWorks2008是当前数据库。在Select语句中,我在select列表中指定了TABLE_NAME和Table_type列,在from从句中使用表的Information Schema 视图(带上INFORMATION_SCHEMA模式名),然后在where从句中限制搜索结果。如下结果表明,HumanResources模式中包括基本表和view。

TABLE_NAMETABLE_TYPE
DepartmentBASE TABLE
EmployeeBASE TABLE
EmployeeDepartmentHistoryBASE TABLE
EmployeePayHistoryBASE TABLE
JobCandidateBASE TABLE
vEmployeeVIEW
vEmployeeDepartmentVIEW
vEmployeeDepartmentHistoryVIEW
vJobCandidateVIEW
vJobCandidateEmploymentVIEW
vJobCandidateEducationVIEW
ShiftBASE TABLE

  这都是在用Information Schema视图的例子。在Sql Server在线文档上,参考“Information Schema Views (Transact-SQL)”这个主题,你能找到sql server支持的视图的列表。除了描述视图所返回的列以外,这个主题提供了附加的信息,这对理解视图是很重要的。不过,Sql Server Information Schema视图大部分是易于理解和使用的。因为他们是在创建数据库时自动创建的,你可以立即开始使用这些视图。

相关推荐