IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 数据库 > MSSQL > 重命名Sql Server外键约束名的方法

重命名Sql Server外键约束名的方法

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

数据库原先是采用PowerDesigner设计的,sql server外键约束的命名非常难看,并且也和后来在SSMS中额外添加的Sql Server外键约束命名规则不一致,因此想遍历数据库的所有外键约束,找到外键约束的相关对象,然后重新生成一致的命名。

采用的命名规则是:

  1. FK_ForeignTable_PrimaryTable_On_ForeignColumn 

直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。

Sql Server提供了很多动态管理视图(Dynamic management views,DMV)和存储过程,方便我们对数据库进行维护。这里我用到了以下两个sys.foreign_key_columns(包含外键约束完整信息)和sys.objects(数据库对象信息)这两个DMV以及sp_rename执行重命名的系统存储过程。代码如下:

  1. declare fkcur cursor for  
  2. select  
  3. OBJECT_NAME(col.constraint_object_id) as FKConstraintName  
  4. ,fkTable.name as FKTable  
  5. ,fkCol.name as FKColumn  
  6. ,pkTable.name as PKTable  
  7. ,pkCol.name as PKColumn  
  8. from sys.foreign_key_columns col  
  9. -- 外键约束是建立在外键表上的,  
  10. -- 因此foreign_key_columns表中的parent_object_id和parent_column_id分别表示外键表和外键列  
  11. inner join sys.objects fkTable  
  12.     on fkTable.object_id = col.parent_object_id  
  13. inner join sys.columns fkCol  
  14.     on fkCol.column_id = col.parent_column_id  
  15.     and fkCol.object_id = fkTable.object_id  
  16. -- foreign_key_columns表中的referenced_object_id和referenced_column_id分别指向  
  17. -- 外键约束的主键表对象以及主键列  
  18. inner join sys.objects pkTable  
  19.     on pkTable.object_id = col.referenced_object_id  
  20. inner join sys.columns pkCol  
  21.     on pkCol.column_id = col.referenced_column_id  
  22.     and pkCol.object_id = pkTable.object_id  
  23. order by OBJECT_NAME(col.constraint_object_id)  
  24.  
  25. open fkcur  
  26. declare @constraintName nvarchar(128)  
  27. declare @fkTable nvarchar(64)  
  28. declare @fkColumn nvarchar(64)  
  29. declare @pkTable nvarchar(64)  
  30. declare @pkColumn nvarchar(64)  
  31. declare @newConstraintName nvarchar(128)  
  32.  
  33. fetch next from fkcur  
  34. into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn  
  35. while @@FETCH_STATUS = 0 
  36. begin  
  37.     set @newConstraintName = 'FK_'+@fkTable+'_'+@pkTable+'_On_'+@fkColumn  
  38.     exec sp_rename @constraintName,@newConstraintName,'Object'  
  39.  
  40.     fetch next from fkcur  
  41.     into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn  
  42. end  
  43. close fkcur  
  44. deallocate fkcur  

关键词标签:Sql Server

相关阅读 sql server系统表损坏的解决方法 SQL Server asp.net 数据提供程序连接池 SqlServer2005对现有数据进行分区具体步骤 一个Access数据库数据传递的实例方法 为导入文件加上时间戳标记的两种方法 SQL Server 2005 在不允许远程连接的情况下的破解

文章评论
发表评论

热门文章 sql server系统表损坏的解决方法 sql server系统表损坏的解决方法 SqlServer2005对现有数据进行分区具体步骤 SqlServer2005对现有数据进行分区具体步骤 解决SQL Server中Group无法实现的问题 解决SQL Server中Group无法实现的问题 SQL Server 2005降级到2000的正确操作步骤 SQL Server 2005降级到2000的正确操作步骤 手把手教你学会SQL Server镜像操作 手把手教你学会SQL Server镜像操作 实战手记:让百万级数据瞬间导入SQL Server 实战手记:让百万级数据瞬间导入SQL Server

相关下载

人气排行 配置和注册ODBC数据源-odbc数据源配置教程 如何远程备份(还原)SQL2000数据库 SQL2000数据库远程导入(导出)数据 SQL2000和SQL2005数据库服务端口查看或修改 修改Sql Server唯一约束教程 SQL Server 2005降级到2000的正确操作步骤 sql server系统表损坏的解决方法 浅谈JSP JDBC来连接SQL Server 2005的方法 SQL Server创建表语句介绍 MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系 如何使用SQL Server中的客户端配置工具 SQL Server 分布式查询:OLE DB连接(一)