Share via


Creazione e modifica di vincoli CHECK

È possibile creare un vincolo CHECK come parte della definizione della tabella quando si crea una tabella. Se la tabella esiste già, è possibile aggiungere un vincolo CHECK. Tabelle e colonne possono includere più vincoli CHECK.

Se è già presente un vincolo CHECK, è possibile modificarlo o eliminarlo. È possibile, ad esempio, modificare l'espressione utilizzata dal vincolo CHECK in una colonna della tabella.

Nota

Per modificare un vincolo CHECK, è innanzitutto necessario eliminare il vincolo CHECK esistente e quindi crearlo di nuovo con la nuova definizione.

Nell'esempio di Transact-SQL seguente viene creata una nuova tabella, che viene quindi modificata tramite l'aggiunta di un vincolo CHECK alla colonna CreditRating.

IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors 
    (VendorID int PRIMARY KEY, VendorName nvarchar (50), 
    CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
    CHECK (CreditRating >= 1 AND CreditRating <= 5)

Eliminare un vincolo CHECK per rimuovere i limiti su valori di dati validi in una o più colonne incluse nell'espressione di vincolo.

Per creare un vincolo CHECK in fase di creazione di una tabella

Per creare un vincolo CHECK in una tabella esistente

Per eliminare un vincolo CHECK

Applicazione di un vincolo CHECK tramite WITH NOCHECK

Quando un vincolo CHECK viene aggiunto a una tabella esistente, può essere applicato solo ai nuovi dati oppure ai dati esistenti. Per impostazione predefinita, il vincolo CHECK viene applicato sia ai dati esistenti che a quelli nuovi. Utilizzare l'opzione WITH NOCHECK dell'istruzione ALTER TABLE per applicare il nuovo vincolo solo ai nuovi dati aggiunti. Questa opzione risulta utile quando i dati esistenti soddisfano già il nuovo vincolo CHECK o quando una regola business richiede l'imposizione del vincolo soltanto a partire da un determinato momento.

È possibile, ad esempio, che un vincolo precedente richieda che i codici postali siano limitati a cinque cifre e che un nuovo vincolo richieda codici postali a nove cifre. I dati precedenti con codici postali a cinque cifre sono ancora validi e coesistono con i nuovi dati che contengono codici postali a nove cifre. Pertanto, è necessario controllare soltanto i nuovi dati in base al nuovo vincolo.

Tuttavia, è opportuno prestare attenzione quando si aggiunge un vincolo senza controllare i dati esistenti perché in questo modo non vengono eseguite in Motore di database le verifiche che garantiscono l'integrità delle regole per la tabella.

Per impedire il controllo dei dati esistenti quando si crea un vincolo CHECK

Disattivazione di vincoli CHECK

È possibile disattivare i vincoli CHECK esistenti per operazioni specifiche, ad esempio operazioni INSERT o UPDATE ed elaborazioni delle repliche.

  • Istruzioni INSERT e UPDATE

    Disattivando un vincolo CHECK si consente la modifica dei dati nella tabella senza che ne venga eseguita la convalida tramite i vincoli. Disattivare un vincolo CHECK durante l'esecuzione delle istruzioni INSERT e UPDATE se i nuovi dati violeranno il vincolo o se il vincolo deve essere applicato soltanto ai dati già presenti nel database.

  • Elaborazione di repliche

    Disattivare un vincolo CHECK 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. Questi due database si trovano in genere, ma non necessariamente, in server distinti. Se i vincoli CHECK specifici del database di origine non vengono disattivati, 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 CHECK per le istruzioni INSERT e UPDATE

Per disattivare un vincolo CHECK per la replica

Per ottenere informazioni sui vincoli CHECK

Vedere anche

Concetti