Elh*_*far 4 sql t-sql sql-server
我想删除具有以下条件的所有外键.
SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME IN ('Table1', 'Table2')
AND CONSTRAINT_NAME LIKE '%FK__%__DL%'
Run Code Online (Sandbox Code Playgroud)
有一个名为INFORMATION_SCHEMA.TABLE_CONSTRAINTS
存储所有表约束的表.约束类型FOREIGN KEY
也保留在该表中.因此,通过过滤此类型,您可以访问所有外键.
SELECT *
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
Run Code Online (Sandbox Code Playgroud)
如果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
Run Code Online (Sandbox Code Playgroud)
EXISTS
函数及其参数确保外键至少有一个约束.
归档时间: |
|
查看次数: |
5865 次 |
最近记录: |