当前位置:首页 > 系统运维 > 正文内容

巧对sql server外键重命名

a8116255316年前 (2010-09-13)系统运维9

sql server外键假如不合我们的心意,能不能进行重命名呢?答案是肯定的。下文的例子就将为您示范sql server外键如何进行重命名,供您参考。

本实例的数据库原先是采用PowerDesigner设计的,那些外键约束的命名非常难看,并且也和后来在S *** S中额外添加的外键约束命名规则不一致,因此就像遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。

采用的命名规则是:

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   

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/22378.html

分享给朋友:

“巧对sql server外键重命名” 的相关文章

微软今天正式停止对windows 7的主流支持

微软今天正式停止对windows 7的主流支持

北京时间1月13日消息,根据计划,微软将于2015年1月13日正式结束对Windows 7SP1的“主流支持”,而这也标志着“扩展支持”阶段的开始,这个阶段将于2020年1月14日结束。 2013年10月份,微软终止销售独立的Windows 7系统安装包,并要求制造商于2014年10月份停止生...

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态   Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...

windows 7系统件夹和文件都不显示名字如何解决

windows 7系统件夹和文件都不显示名字如何解决

假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...

windows 7如何创建拨号连接

windows 7如何创建拨号连接

一、打开控制面板,选择“网络和共享中心”; 二、在网络和共享中心中选择“设置新的连接或网络”; 三、选择连接到Internet; 四、选择“仍要设置新的连接”; 五、选择“宽带PPPoE ”; 六、输入对应的宽带帐号及密码,点击连接即可;...

Ubuntu系统上挂载U盘和Windows分区问题的解决实例

Ubuntu系统上挂载U盘和Windows分区问题的解决实例

Ubuntu挂载U盘问题 复制代码代码如下: 老是说special device /dev/sdb1 does not exist,无比郁闷 复制代码代码如下:#fdisk /dev/sda 复制代码代码如下: 是有个 这个咚咚。。。。 复制代码代码如下: 最后: 复制代码代码如下:...

Ubuntu 14.04安装Wine以便使用Windows应用

Ubuntu 14.04安装Wine以便使用Windows应用

假如你想要在Ubuntu上使用Windows应用,就需要用到Wine了,除了支持Linux系统外,Wine还可运行于其他系统,是个非常使用的软件,下面小编就以Ubuntu 14.04为例,给大家介绍下Ubuntu 14.04安装Wine的步骤。 Ubuntu 14.04安装Wine的步骤 1...