sql >> Databáze >  >> RDS >> Sqlserver

Jak lze dočasně deaktivovat omezení cizích klíčů pomocí T-SQL?

Pokud chcete deaktivovat všechna omezení v databázi, spusťte tento kód:

-- disable all constraints
EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Chcete-li je znovu zapnout, spusťte:(tisk je samozřejmě volitelný a pouze vypisuje tabulky)

-- enable all constraints
exec sp_MSforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"

Považuji to za užitečné při naplňování dat z jedné databáze do druhé. Je to mnohem lepší přístup než upustit od omezení. Jak jste zmínil, přijde vhod, když vypustíte všechna data z databáze a znovu ji naplníte (řekněme v testovacím prostředí).

Pokud odstraňujete všechna data, může být toto řešení užitečné.

Někdy je také užitečné zakázat všechny spouštěče, kompletní řešení můžete vidět zde.



  1. Jak získám seznam všech tabulek v databázi pomocí TSQL?

  2. Funkce zabezpečení v SQL Server 2017

  3. Jak funguje LOG() v MariaDB

  4. MAX() – Najděte maximální hodnotu ve sloupci v MySQL