如何禁用所有表的约束并启用它?

Out*_*Out 29 sql-server constraints foreign-keys foreign-key-relationship sql-server-2008

我有60张桌子.我想删除10个表,其中这10个表是约束(PK,FK)到其他20个表.删除这10个表时,我需要截断或删除其他20个表中的数据.最后,我想禁用所有60个表约束(FK,PK),然后在完成添加/删除表的工作后启用所有60个表约束.这可能吗?

当我放下一张桌子时,它要求FK.当我截断那些FK依赖项时,它仍然显示相同.我不想搞砸所有那些FK,PK.

我想知道更聪明的方法.

Ste*_*ger 51

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
GO
Run Code Online (Sandbox Code Playgroud)

您可能还想这样做:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? DISABLE TRIGGER ALL"
GO
Run Code Online (Sandbox Code Playgroud)

之后启用它们

EXEC sp_MSforeachtable @command1="ALTER TABLE ? ENABLE TRIGGER ALL"
GO

-- SQL enable all constraints - enable all constraints sql server
-- sp_MSforeachtable is an undocumented system stored procedure
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"
GO
Run Code Online (Sandbox Code Playgroud)

编辑:
如果禁用约束是不够的,则必须删除约束.

如果您正在删除并重新创建表,则必须在之后重新创建外键约束.

如果您只需要删除约束,您可能会发现这很有用:
SQL DROP TABLE外键约束

如果您需要编写一个脚本来删除并创建约束,您可能会发现我的帖子更有用:
SQL Server:如何从information_schema获取外键引用?


Sri*_*ama 26

要禁用您可以应用此:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
Run Code Online (Sandbox Code Playgroud)

启用:

EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
Run Code Online (Sandbox Code Playgroud)


Ale*_*xey 7

declare @tname varchar(128), @tschema varchar(128);

declare tables cursor for
select TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.TABLES;

open tables;

fetch next from tables
    into @tschema, @tname;

while @@FETCH_STATUS = 0
begin
    execute ('alter table [' + @tschema + '].[' + @tname + '] nocheck constraint all');
    fetch next from tables
        into @tschema, @tname;
end;

close tables;

deallocate tables;
Run Code Online (Sandbox Code Playgroud)


Mar*_*shi 5

尝试使用此命令

ALTER TABLE table_Name NOCHECK CONSTRAINT all
Run Code Online (Sandbox Code Playgroud)

禁用表的所有约束,并为所有10个表执行此操作,但在此之前检查是否未在表上放置任何Delete_Cascade,因为显示的错误可能也是因为sub_tables依赖性.如果它不起作用尝试通过此命令禁用特定约束,它可能有两个或三个额外的依赖项.

ALTER TABLE tableName NOCHECK CONSTRAINT constraintName
Run Code Online (Sandbox Code Playgroud)