Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

In che modo i vincoli di chiave esterna possono essere temporaneamente disabilitati utilizzando T-SQL?

Se vuoi disabilitare tutti i vincoli nel database, esegui questo codice:

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

Per riattivarli, esegui:(la stampa è ovviamente facoltativa e sta solo elencando le tabelle)

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

Lo trovo utile quando si popolano i dati da un database all'altro. È un approccio molto migliore rispetto all'eliminazione dei vincoli. Come hai detto, è utile quando si eliminano tutti i dati nel database e lo si ripopola (diciamo nell'ambiente di test).

Se stai eliminando tutti i dati, potresti trovare utile questa soluzione.

Inoltre, a volte è utile disabilitare anche tutti i trigger, puoi vedere la soluzione completa qui.