我有60張桌子。我想放10個表格,其中這10個表格是約束(PK,FK)到其他20個表格。在刪除這10個表時,我需要從其他20個表中截斷或刪除數據。最後,我希望禁用所有60個表約束(FK,PK),然後在完成添加/刪除表的工作後啓用所有60個表約束。這可能嗎?如何禁用所有表的約束並啓用它?
當我放下一張桌子時,它要求FK。當我截斷這些FK依賴時,它也顯示相同。我不想混淆所有那些FK,PK。
我想知道更聰明的方法。
我有60張桌子。我想放10個表格,其中這10個表格是約束(PK,FK)到其他20個表格。在刪除這10個表時,我需要從其他20個表中截斷或刪除數據。最後,我希望禁用所有60個表約束(FK,PK),然後在完成添加/刪除表的工作後啓用所有60個表約束。這可能嗎?如何禁用所有表的約束並啓用它?
當我放下一張桌子時,它要求FK。當我截斷這些FK依賴時,它也顯示相同。我不想混淆所有那些FK,PK。
我想知道更聰明的方法。
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 foreign key constraint
如果你需要編寫一個腳本,刪除和創建約束,你可能會發現我的帖子在這裏更加有用:
SQL Server: Howto get foreign key reference from information_schema?
嘗試使用此命令
ALTER TABLE table_Name NOCHECK CONSTRAINT all
禁用喲所有約束ur表格,併爲所有10個表格執行此操作,但在此之前請檢查您是否未在表格上放置任何Delete_Cascade,因爲顯示的錯誤可能是由於sub_tables依賴關係造成的。如果它沒有工作,試着通過這個命令禁用特定的約束,它可能有兩個或三個額外的依賴關係。
ALTER TABLE tableName NOCHECK CONSTRAINT constraintName
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;
要禁用,你可以應用此:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
要啓用:
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
我試圖禁用和DROP表,但該表沒有得到下降,並說由FK約束引用.., – Out 2013-02-20 05:36:28
@Pink在重新啓用'CONSTRAINT'之前,你已經嘗試過'DROP'語句嗎? – 2013-02-20 05:48:12
我有禁用約束和DROP表,當禁用它必須下降沒有錯誤,但它再次顯示「無法刪除對象'DropTable',因爲它由FOREIGN KEY約束引用」。 – Out 2013-02-20 05:54:28