如何禁用所有的表约束和启用它?(How to disable Constraints for all

2019-07-20 05:02发布

我有60桌。 我要下降10桌,其中这10个表是约束(PK,FK)与其他20桌。 虽然这些下探10桌,我需要从其他20桌截断或删除数据。 最后,我要禁用所有60个表的约束(FK,PK),然后让所有60个表约束,而我正增加/删除表的工作做完之后。 这可能吗?

当我删除表它所需要的FK。 当我截断的FK的依赖也依然呈现出相同。 我不想惹那些FK,PK。

我想知道更聪明的方法。

Answer 1:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
GO

您也可以这样做:

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

为了之后允许它们

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

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

如果你删除并重新创建表,你将不得不重新算账外键约束。

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

如果你需要编写一个脚本,删除和创建约束,你可能会发现这里我的帖子更多有用:
SQL服务器:HOWTO得到INFORMATION_SCHEMA外键引用?



Answer 2:

要禁用,你可以应用此:

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

启用:

EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"


Answer 3:

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;


Answer 4:

尝试使用这个命令

ALTER TABLE table_Name NOCHECK CONSTRAINT all

禁用所有约束你的表,这样做对所有的10个表,但检查之前,如果你还没有把任何Delete_Cascade你的表,因为这是显示,因为sub_tables的也许是错误的依赖关系了。 如果没有工作,试图通过这个命令来禁用特定的约束,它也许是两只或三个额外的依赖。

ALTER TABLE tableName NOCHECK CONSTRAINT constraintName


文章来源: How to disable Constraints for all the tables and enable it?