SQL Server 系统表、兼容性视图、目录视图

SQL Server 早期版本中的许多系统表现在都作为一组视图实现。这些视图称为兼容性视图,仅用于向后兼容。兼容性视图公开的元数据在 SQL Server 2000 中也提供。但是,兼容性视图不公开与在 SQL Server 2005 及更高版本中引入的功能有关的任何元数据。因此,当您使用新功能(例如 Service Broker 或分区)时,必须切换到使用目录视图。

SQL Server 2000 系统表/兼容性视图                   SQL Server 2005 目录视图

syscolumns                                                  sys.columns (为包含列的对象(如视图或表)的每列返回一行)

sysobjects                                                   sys.objects (在数据库中创建的每个用户定义的架构范围内的对象在该表中均对应一行)

利用这些视图,我们在操作数据结构前可以先做一些判断:

表判断:不存在则创建
IF NOT EXISTS ( SELECT  1  FROM         sys.objects
                    WHERE     (type IN (N'U')) AND (object_id = OBJECT_ID(N'表名'))  )

 

列字段判断:不存在则创建,存在则更新
IF NOT EXISTS ( SELECT    1  FROM         sys.columns INNER JOIN
                           sys.objects ON sys.columns.object_id = sys.objects.object_id
           WHERE     (sys.objects.name = N'表名') AND (sys.objects.type = N'U') AND (sys.columns.name = N'列名') )

 

函数:存在则删除,再重新创建
IF EXISTS ( SELECT  1  FROM         sys.objects
           WHERE     (type IN (N'FN', N'IF', N'TF', N'FS', N'FT')) AND (object_id = OBJECT_ID(N'函数名'))  )

 

存储过程:存在则删除,再重新创建
IF EXISTS ( SELECT  1  FROM         sys.objects
           WHERE     (type IN (N'P', N'PC')) AND (object_id = OBJECT_ID(N'存储过程名'))  )

 

引用自:

兼容性视图 (Transact-SQL)  http://msdn.microsoft.com/zh-cn/library/ms187376.aspx

将系统表映射到系统视图  http://msdn.microsoft.com/zh-cn/library/ms187997.aspx

posted on 2010-06-21 21:45  黄小二  阅读(559)  评论(0编辑  收藏  举报