/ / SQL Server - Aggiornamento di una tabella con chiavi esterne, utilizzando DELETE / INSERT invece di UPDATE - sql, sql-server, sqltransaction

SQL Server - Aggiornamento di una tabella con chiavi esterne, utilizzando DELETE / INSERT invece di UPDATE - sql, sql-server, sqltransaction

Ho una tabella principale con molte tabelle associate ad essa collegate usando una chiave esterna "id".

Devo aggiornare una riga in questa tabella principale.

Invece di aggiornare tutti i campi della riga, uno per uno, sarebbe più facile per me semplicemente cancellando l'intera riga e ricrearlo con i nuovi valori (mantenendo la chiave primaria originale!).

Esiste un modo, all'interno di una transazione, per eliminare tale riga che ha vincoli di chiave esterna se la riga viene ricreata, con la stessa chiave primaria, prima che la transazione sia effettivamente impegnata?

L'ho provato, e non sembra funzionare ...

C'è qualcosa che posso fare per ottenerlo oltre a eliminare i vincoli prima della mia operazione DELETE? Una specie di serratura?

risposte:

1 per risposta № 1

No.

Senza rilasciare / disabilitare il vincolo, SQL Server imporrà la relazione e impedirà l'eliminazione della riga di riferimento.

È possibile disabilitare il vincolo, masi verificherà il sovraccarico quando si abilita che SQL Server deve verificare OGNI RIFERIMENTO su quella chiave prima che considererà nuovamente le relazioni attendibili.

È molto meglio dedicare del tempo a sviluppare una funzione di aggiornamento / upsert separata piuttosto che sostenere un ulteriore sovraccarico di elaborazione ogni volta che è necessario modificare un record.

È possibile modificare la chiave esterna per utilizzare un ELIMINA CASCATA, ma questo ha il proprio bagaglio e spese generali.