Sql Server查询,关闭外键约束的sql

环境:SQL SERVER2008

情况:有时候,删除表数据(delete方式),会受到外键约束,导致删除失败

注意:该方式,仅对delete能用,truncate无效(truncate删除数据,还是会受到外键影响,除非删除外键,然后删除数据,再重新建立外键约束,网上有人说可以,但我测试过,依然提示外键约束问题)

解决办法:关闭检查约束 → 删除数据 → 约束打开

 

1)查询出,关闭外键约束的SQL

SELECT 
'ALTER TABLE ' + O.NAME + ' NOCHECK CONSTRAINT [' + F.NAME + '];' AS COMMAND 
FROM 
SYS.FOREIGN_KEYS F INNER JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID = O.OBJECT_ID 
WHERE O.TYPE = 'U' AND F.TYPE = 'F';

2)查询出,打开外键约束的SQL

SELECT 
'ALTER TABLE ' + O.NAME + ' CHECK CONSTRAINT [' + F.NAME + '];' AS COMMAND 
FROM 
SYS.FOREIGN_KEYS F INNER JOIN SYS.ALL_OBJECTS O ON F.PARENT_OBJECT_ID = O.OBJECT_ID 
WHERE O.TYPE = 'U' AND F.TYPE = 'F';

参考:

Sql Server有主外键关系时添加、删除数据

SQLSERVER清空(Truncate)被外键引用的数据表

SQL Server 2008 R2——TRUNCATE TABLE 无法截断表 该表正由 FOREIGN KEY 约束引用(该文章,也是说了truncate不能删除具有外键约束表的数据)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值