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