首页 » 技术分享 » 查看、清除数据库中的外键约束

查看、清除数据库中的外键约束

 

系统表[sysforeignkeys]记录了数据库的所有外键关系,查看数据库的外键约束可以通过此表获得,

例如:

use AdventureWorksDW

select const=object_name(constid)

      ,f_table=object_name(fkeyid)

      ,fcol=f.name

      ,r_table=object_name(rkeyid)

      ,rcol=r.name

      ,keyno

from sysforeignkeys left join syscolumns f on  f.id=fkeyid and f.colid=fkey

                    left join syscolumns r on  r.id=rkeyid and r.colid=rkey

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

顺手写了一个清除所有外键关系的存储过程:

create procedure DropDbFk

as

--备份

if object_id('__foreignkeys') is not null drop table  __foreignkeys

use AdventureWorksDW

select const=object_name(constid)

      ,f_table=object_name(fkeyid)

      ,fcol=f.name

      ,r_table=object_name(rkeyid)

      ,rcol=r.name

      ,keyno

into __foreignkeys

from sysforeignkeys left join syscolumns f on  f.id=fkeyid and f.colid=fkey

                    left join syscolumns r on  r.id=rkeyid and r.colid=rkey

--删除整个数据库内全部表的外键约束

declare @fk_table sysname

       ,@fk_const_name sysname

       ,@sql varchar(1000)

     

declare fkConstDelete cursor for

  select f_table,const from __foreignkeys order by const

 

open fkConstDelete

fetch next from fkConstDelete into @fk_table, @fk_const_name

 

while (@@fetch_status=0) begin

  select @sql = 'Alter table '+@fk_table+' drop constraint '+@fk_const_name

 

  if object_id(@fk_const_name) is not null  exec(@sql)

 

  fetch next from fkConstDelete into @fk_table,@fk_const_name

end

Close  fkConstDelete

Deallocate fkConstDelete

 

go 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

其实数据从 SQL 2005 回迁到 SQL2000,要解决外键约束可以有更简便的方法,就是在脚本中先把外键约束那一段关了,

等数据迁移好后,再运行之前禁闭了的那段约束脚本。

呵呵,第一次在技术论坛写BLOG,不当的地方还请朋友们多多指正。

转载自原文链接, 如需删除请联系管理员。

原文链接:查看、清除数据库中的外键约束,转载请注明来源!

0