Sql Server重命名所有外键约束
2011-11-01 14:03
246 查看
公司服务器上的数据库原先是采用PowerDesigner设计的,那些外键约束的命名非常难看,并且也和后来在SSMS中额外添加的外键约束命名规则不一致,因此我想遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。
我采用的命名规则是:
Sql Server提供了很多动态管理视图(Dynamic management views,DMV)和存储过程,方便我们对数据库进行维护。这里我用到了以下两个sys.foreign_key_columns(包含外键约束完整信 息)和sys.objects(数据库对象信息)这两个DMV以及sp_rename执行重命名的系统存储过程。代码如下:
我采用的命名规则是:
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所有外键约束名的方法
- SQL Server 临时禁用和启用所有外键约束
- SQL Server 临时禁用和启用所有外键约束
- SQL Server 临时禁用和启用所有外键约束
- SQL Server 临时禁用和启用所有外键约束
- SQL Server 查询所有外键子父表关系
- SQL批量删除用户表(先删除所有外键约束,再删除所有表)
- sql server 删除数据库中所有的外键关系
- sql server中所有的外键信息
- sql server怎样删除外键约束
- 按命名规范重命名所有默认值约束名称
- SQL Server 2005 建立外键约束(foreign key)
- SQL Server查询外键约束与删除外键约束
- SQL SERVER 2008 禁用或启用外键约束
- 【SQL Server学习笔记】14:查漏补缺1(三值谓词,范式,主键/唯一/外键/检查/默认约束)
- 按命名规范重命名所有默认值约束名称
- sql server中对表添加外键约束
- sql server 查找主键、外键、索引、约束
- sql server中的外键约束-数据库专栏,SQL Server
- SQLServer 删除所有表的外键约束