How to drop all foreign keys from a SQL Server database?(如何从 SQL Server 数据库中删除所有外键?)
问题描述
我想删除所有具有以下条件的外键.
I want to drop the all foreign keys that have the following conditions.
SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME IN ('Table1', 'Table2')
AND CONSTRAINT_NAME LIKE '%FK__%__DL%'
推荐答案
有一个名为 INFORMATION_SCHEMA.TABLE_CONSTRAINTS
的表,它存储了所有表的约束.FOREIGN KEY
的约束类型也保留在该表中.因此,通过这种类型的过滤,您可以访问所有外键.
There is a table named INFORMATION_SCHEMA.TABLE_CONSTRAINTS
which stores all tables constraints. constraint type of FOREIGN KEY
is also keeps in that table. So by filtering of this type you can reach to all foreign keys.
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
如果您创建一个动态查询(用于DROP
-ing 外键)以更改表,则可以达到更改所有表的约束的目的.
If you create a dynamic query (for DROP
-ing the foreign key) in order to alter the table, you can reach to the aim of altering the constraints of all tables.
WHILE(EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'FOREIGN KEY' AND TABLE_NAME IN ('Table1', 'Table2') AND CONSTRAINT_NAME LIKE '%FK__%__DL%'))
BEGIN
DECLARE @sql_alterTable_fk NVARCHAR(2000)
SELECT TOP 1 @sql_alterTable_fk = ('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
AND TABLE_NAME IN ('Table1', 'Table2')
AND CONSTRAINT_NAME LIKE '%FK__%__DL%'
EXEC (@sql_alterTable_fk)
END
EXISTS
函数及其参数确保至少有一个外键约束.
EXISTS
function with its parameter assures that there is at least one constrain for foreign key.
这篇关于如何从 SQL Server 数据库中删除所有外键?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从 SQL Server 数据库中删除所有外键?


基础教程推荐
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- oracle区分大小写的原因? 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- 在多列上分布任意行 2021-01-01