日期:2011-01-25 23:11:00 来源:本站整理
巧对sql server外键重命名[MSSQL防范]
本文“巧对sql server外键重命名[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
sql server外键假如不合我们的心意,能不能举行重命名呢?答案是必定的.下文的例子就将为您示范sql server外键若何举行重命名,供您参考.
本实例的数据库原先是采取PowerDesigner计划的,那些外键约束的命名非常丢脸,并且也和后来在SSMS中额外增添的外键约束命名法则不一致,因此就像遍历数据库的全部外键约束,找到外键约束的相关对象,然后重新生成一致的命名.
采取的命名法则是:
- 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外键重命名[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论