数据库原先是采用PowerDesigner设计的,sql server外键约束的命名非常难看,并且也和后来在SSMS中额外添加的Sql Server外键约束命名规则不一致,因此想遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。
采用的命名规则是:
- FK_ForeignTable_PrimaryTable_On_ForeignColumn
直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。
Sql Server提供了很多动态管理视图(Dynamic management views,DMV)和存储过程,方便我们对数据库进行维护。这里我用到了以下两个sys.foreign_key_columns(包含外键约束完整信息)和sys.objects(数据库对象信息)这两个DMV以及sp_rename执行重命名的系统存储过程。代码如下:
- declare fkcur cursor for
- select
- OBJECT_NAME(col.constraint_object_id) as FKConstraintName
- ,fkTable.name as FKTable
- ,fkCol.name as FKColumn
- ,pkTable.name as PKTable
- ,pkCol.name as PKColumn
- from sys.foreign_key_columns col
- -- 外键约束是建立在外键表上的,
- -- 因此foreign_key_columns表中的parent_object_id和parent_column_id分别表示外键表和外键列
- inner join sys.objects fkTable
- on fkTable.object_id = col.parent_object_id
- inner join sys.columns fkCol
- on fkCol.column_id = col.parent_column_id
- and fkCol.object_id = fkTable.object_id
- -- foreign_key_columns表中的referenced_object_id和referenced_column_id分别指向
- -- 外键约束的主键表对象以及主键列
- inner join sys.objects pkTable
- on pkTable.object_id = col.referenced_object_id
- inner join sys.columns pkCol
- on pkCol.column_id = col.referenced_column_id
- and pkCol.object_id = pkTable.object_id
- order by OBJECT_NAME(col.constraint_object_id)
- open fkcur
- declare @constraintName nvarchar(128)
- declare @fkTable nvarchar(64)
- declare @fkColumn nvarchar(64)
- declare @pkTable nvarchar(64)
- declare @pkColumn nvarchar(64)
- declare @newConstraintName nvarchar(128)
- fetch next from fkcur
- into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn
- while @@FETCH_STATUS = 0
- begin
- set @newConstraintName = 'FK_'+@fkTable+'_'+@pkTable+'_On_'+@fkColumn
- exec sp_rename @constraintName,@newConstraintName,'Object'
- fetch next from fkcur
- into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn
- end
- close fkcur
- deallocate fkcur
关键词标签:Sql Server
相关阅读
热门文章 SqlServer2005对现有数据进行分区具体步骤sql server系统表损坏的解决方法MS-SQL2005服务器登录名、角色、数据库用户Access、SQL Server、Oracle常见应用的区别
人气排行 如何远程备份(还原)SQL2000数据库SQL2000数据库远程导入(导出)数据配置和注册ODBC数据源-odbc数据源配置教程SQL2000和SQL2005数据库服务端口查看或修改SQL Server 2005降级到2000的正确操作步骤修改Sql Server唯一约束教程浅谈JSP JDBC来连接SQL Server 2005的方法SQL Server创建表语句介绍
查看所有0条评论>>