我想删除具有以下条件的所有外键。
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
也保存在该表中。因此,通过这种类型的过滤,您可以访问所有外键。
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
如果您创建动态查询(例如DROP
-外键)来改变表,可以达到改变所有表的约束的目的。
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
函数及其参数确保外键至少有一个约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)