Creazione e modifica di vincoli FOREIGN KEY
È possibile creare un vincolo FOREIGN KEY come parte della definizione della tabella quando si crea una tabella. Se esiste già una tabella, è possibile aggiungere un vincolo FOREIGN KEY, a condizione che questo sia collegato a un vincolo PRIMARY KEY o UNIQUE esistente in un'altra, o nella stessa, tabella. Una tabella può contenere più vincoli FOREIGN KEY.
Se è già presente un vincolo PRIMARY KEY, è possibile modificarlo o eliminarlo. È possibile, ad esempio, che il vincolo FOREIGN KEY della tabella faccia riferimento ad altre colonne. Non è tuttavia possibile modificare la lunghezza di una colonna definita con un vincolo FOREIGN KEY.
[!NOTA] Per modificare un vincolo FOREIGN KEY, è innanzitutto necessario eliminare il vincolo FOREIGN KEY esistente e quindi ricrearlo con la nuova definizione.
Eliminare un vincolo FOREIGN KEY per rimuovere il requisito per l'integrità referenziale tra le colonne chiave esterna e le colonne chiave primaria, o vincolo UNIQUE, correlate in un'altra tabella.
Per creare un vincolo FOREIGN KEY in fase di creazione di una tabella
Per creare un vincolo FOREIGN KEY in una tabella esistente
Procedura: Creazione di relazioni tra tabelle (Visual Database Tools)
Per eliminare un vincolo FOREIGN KEY
Utilizzo forzato di un vincolo FOREIGN KEY tramite WITH NOCHECK
Quando un vincolo FOREIGN KEY viene aggiunto a una o più colonne esistenti nella tabella, per impostazione predefinita in Motore di database di SQL Server 2005 vengono esaminati i dati esistenti nelle colonne per verificare che tutti i valori, ad eccezione di NULL, esistano nelle colonne del vincolo PRIMARY KEY o UNIQUE a cui viene fatto riferimento. È tuttavia possibile evitare, in Motore di database, il controllo dei dati delle colonne rispetto al nuovo vincolo e l'aggiunta del nuovo vincolo indipendentemente dai dati disponibili nelle colonne. L'opzione WITH NOCHECK è utile quando i dati esistenti soddisfano già il nuovo vincolo FOREIGN KEY oppure quando una regola business richiede l'applicazione del vincolo solo a partire da un momento specifico.
È tuttavia consigliabile prestare attenzione quando si aggiunge un vincolo senza controllare i dati esistenti, poiché in questo modo non vengono eseguite le verifiche che garantiscono l'integrità dei dati della tabella in Motore di database.
Per impedire il controllo dei dati esistenti in fase di creazione di un vincolo FOREIGN KEY
Disattivazione dei vincoli FOREIGN KEY
È possibile disattivare vincoli FOREIGN KEY esistenti per operazioni specifiche, ad esempio operazioni INSERT o UPDATE ed elaborazioni delle repliche.
Istruzioni INSERT e UPDATE
Disattivando un vincolo FOREIGN KEY si consente la modifica dei dati nella tabella senza che ne venga eseguita la convalida tramite i vincoli. Disattivare un vincolo FOREIGN KEY durante l'esecuzione delle istruzioni INSERT e UPDATE se i nuovi dati violeranno il vincolo o se il vincolo deve essere applicato solo ai dati già presenti nel database.[!NOTA] Qualsiasi operazione di propagazione definita in una chiave primaria correlata non verrà eseguita nelle righe che includono chiavi esterne disattivate.
Elaborazione di repliche
Disattivare un vincolo FOREIGN KEY durante la replica se il vincolo è specifico del database di origine. Quando una tabella viene replicata, la definizione e i dati della tabella vengono copiati dal database di origine al database di destinazione. Se i vincoli FOREIGN KEY sono specifici del database di origine ma non vengono disattivati durante la replica, potrebbero impedire inopportunamente l'immissione di nuovi dati nel database di destinazione. Per ulteriori informazioni, vedere Controllo di vincoli, identità e trigger con l'opzione NOT FOR REPLICATION.
Per disattivare un vincolo FOREIGN KEY per le istruzioni INSERT e UPDATE
Per disattivare un vincolo FOREIGN KEY per la replica
Procedura: Disattivazione di vincoli di chiave esterna per la replica (Visual Database Tools)
Per ottenere informazioni sui vincoli FOREIGN KEY
sys.foreign_keys (Transact-SQL)
Per ottenere informazioni sulle colonne che compongono un vincolo FOREIGN KEY
sys.foreign_key_columns (Transact-SQL)