SQLServer禁用、启用外键约束

摘要:
更改表PUB_ STRU CHECK约束所有;sysobjectsb,其中a.xtype='f'和a.parent_Obj=b.id和b.name=“表名”;sysobjectsb,其中a.xtype='f'和a.parent_Obj=b.id和b.name=“表名”;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
---启用or禁用指定表所有外键约束 
alter table PUB_STRU  NOCHECK constraint all
alter table PUB_STRU  CHECK constraint all
   
---生成启用or禁用指定表外键约束的sql 
select 'ALTER TABLE ' + b.name ' NOCHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name='表名'
select 'ALTER TABLE ' + b.name ' CHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name='表名'
 
--生成的sql如下
ALTER TABLE PUB_STRU NOCHECK CONSTRAINT PUBSTRU_FK1;
ALTER TABLE PUB_STRU NOCHECK CONSTRAINT PUBSTRU_FK2;
ALTER TABLE PUB_STRU CHECK CONSTRAINT PUBSTRU_FK1;
ALTER TABLE PUB_STRU CHECK CONSTRAINT PUBSTRU_FK2;  
 
 --查看约束状态(查询字典表 sys.foreign_keys,该字典表开始出现于sqlserver2005及以上版本):
select name , is_disabled from sys.foreign_keys order by name
 --其中:name  : 外键约束名称   is_disabled : 是否已禁用

  

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--删除外键
alter table AdItem drop constraint AdOrder_AdItem_FK1
 
--增加外键
alter table AdItem
add constraint AdOrder_AdItem_FK1 foreign key (AI_nOrderNo) references AdOrder(AO_nOrderNo)
 
--单个表的一个外键
alter table Student nocheck constraint FK__Student__SchoolN__4222D4EF 
alter table Student check constraint FK__Student__SchoolN__4222D4EF 
 
--单个表的所有外键
alter table Student nocheck constraint all 
alter table Student check constraint all 
 
--某个数据库的所有表
EXEC sp_MSforeachtable @command1='alter table ?  NOCHECK constraint all;
EXEC sp_MSforeachtable @command1='alter table ?  CHECK constraint all;

 

参考:
 Enable/Disable Constraint in SQLServer 
 sp_MSforeachtable使用方法

--启用or禁用指定表所有外键约束 
alter table PUB_STRU  NOCHECK constraint all
alter table PUB_STRU  CHECK constraint all
   
---生成启用or禁用指定表外键约束的sql 
select 'ALTER TABLE ' + b.name ' NOCHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name='表名'
select 'ALTER TABLE ' + b.name ' CHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name='表名'
 
--生成的sql如下
ALTER TABLE PUB_STRU NOCHECK CONSTRAINT PUBSTRU_FK1;
ALTER TABLE PUB_STRU NOCHECK CONSTRAINT PUBSTRU_FK2;
ALTER TABLE PUB_STRU CHECK CONSTRAINT PUBSTRU_FK1;
ALTER TABLE PUB_STRU CHECK CONSTRAINT PUBSTRU_FK2;  
 
 --查看约束状态(查询字典表 sys.foreign_keys,该字典表开始出现于sqlserver2005及以上版本):
select name , is_disabled from sys.foreign_keys order by name
 --其中:name  : 外键约束名称   is_disabled : 是否已禁用

  

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
--删除外键
alter table AdItem drop constraint AdOrder_AdItem_FK1
 
--增加外键
alter table AdItem
add constraint AdOrder_AdItem_FK1 foreign key (AI_nOrderNo) references AdOrder(AO_nOrderNo)
 
--单个表的一个外键
alter table Student nocheck constraint FK__Student__SchoolN__4222D4EF 
alter table Student check constraint FK__Student__SchoolN__4222D4EF 
 
--单个表的所有外键
alter table Student nocheck constraint all 
alter table Student check constraint all 
 
--某个数据库的所有表
EXEC sp_MSforeachtable @command1='alter table ?  NOCHECK constraint all;
EXEC sp_MSforeachtable @command1='alter table ?  CHECK constraint all;

 

参考:
 Enable/Disable Constraint in SQLServer 
 sp_MSforeachtable使用方法

免责声明:文章转载自《SQLServer禁用、启用外键约束》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇通用Mapper一篇文章一张思维导图看懂Android学习最佳路线(转载)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server 2008禁止修改表结构的解决办法

  近日在使用SQL Server 2008 Management Studio时遇到一个奇怪的问题,之前的数据库是用SQL Server 2005创建的,我将数据库文件复制到另外一台机器上,这台机器上安装的是SQL Server 2008,将数据库文件附加进来没有任何问题,但是当我打开SQL Server 2008的Management Studio,修...

SQLyog快捷键

Ctrl+M   创建一个新的连接 Ctrl+N   使用当前设置新建连接 Ctrl+F4   断开当前连接 对象浏览器 F5   刷新对象浏览器(默认) Ctrl+B   设置焦点于对象浏览器 SQL 窗口 Ctrl+T   新建查询编辑器 Ctrl+E   设置焦点于 SQL 窗口 Ctrl+Y   重做  Ctrl+Z   撤销   Ctrl+X  ...

SQL 将查询结果插入到另一张表中

INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件; 例如,要将 test 表插入到 newTest 表中,则可以通过如下SQL语句实现: INSERT INTO newTest SELECT * FROM te...

mysql批量更新数据(性能优化) 第一种方式

   首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新N条数据。实践是检验真理的唯一标准,不一会儿,代码就敲完了,重新试了一下,效果依旧不理想。啊哦,真是要崩溃!后面又想到了利用异步,我一下子开多个mysql连接,同时处理,可是依旧慢的一笔。然后就放弃了,更新的效率肯定是满足不了了。然后就想着绕弯子了,我新建一张表,把旧表数据取出来,处理...

SQL Server dbcc checkdb 做了什么。

第一步:          读取系统元数据、读完这些数据后dbcc checkdb 就知道自己要检测的是一个怎样的数据库了、如果在这一步就出错了、dbcc 就直接出错          了、不会再运行下去。 第二步:          在dbcc checkdb 内部会对数据库运行dbcc checkalloc命令          dbcc checka...

变量命名规范(C#,SQL,前端)

总则 1、变量命名包含两部分:头部+内容部分(其中头部一般为类型缩写,内容部分具体按变量作用命名。如 intNumber) 2、内容名默认为英文单词,若为中文拼音,则在最后补充 _cn,如 intShuZi_cn 3、变量命名方式以驼峰方式,如 intParameterCount 1、C# 变量命名 1、以变量关键字缩写开头(int、str、bol 等),...