Che cos'è il vincolo di controllo:
I vincoli di controllo limitano i valori accettati da una o più colonne.Capiamo il controllo dei vincoli con uno scenario in tempo reale.
Stai lavorando come sviluppatore di SQL Server, devi creare una tabella dbo.Customer che dovrebbe avere colonne come FName, LName e Address. Poiché FName sarà VARCHAR, quindi gli utenti possono inserire valori di stringa che possono contenere alfabeti, numeri e altri caratteri. Vuoi scrivere un vincolo di controllo in modo che FName accetti solo alfabeti.Soluzione:
Creiamo la tabella con Verifica vincolo utilizzando lo script sottostante--Create Table with use YourDatabaseName go Create table dbo.Customer ( FName VARCHAR(100) Not Null, LName VARCHAR(100), StreetAddress VARCHAR(255), Check (FName not like '%[^a-z]%') )
Inseriamo alcuni record nella tabella e vediamo se il nostro Check Constraint funziona come previsto. Dovrebbe consentire solo di inserire quei record in cui FName contiene solo alfabeti.
--insert some sample records insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir4','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('abc3c','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('-tName','Shahzad','xyz address')Quando ho eseguito gli script di inserimento precedenti, di seguito sono riportati i messaggi che ho ricevuto da SQL Server.
(1 riga/i interessata/e)
Msg 547, livello 16, stato 0, riga 18
L'istruzione INSERT è in conflitto con il vincolo CHECK "CK__Customer__FName__5FB337D6". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer", colonna 'FName'.
L'istruzione è stata terminata.
Msg 547, livello 16, stato 0, riga 22
L'istruzione INSERT era in conflitto con il vincolo CHECK "CK__Customer__FName__5FB337D6". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer", colonna 'FName'.
L'istruzione è stata terminata.
Msg 547, livello 16, stato 0, riga 26
L'istruzione INSERT era in conflitto con il vincolo CHECK "CK__Customer__FName__5FB337D6". Il conflitto si è verificato nel database "YourDatabaseName", tabella "dbo.Customer", colonna 'FName'.
L'istruzione è stata terminata.
Ha inserito solo il primo record che contiene tutti gli alfabeti per FName, il resto dei record viene rifiutato dal nostro vincolo di controllo in quanto contengono caratteri diversi dagli alfabeti.
Controlliamo i dati nella tabella per assicurarci che sia inserito un solo record.
Che cos'è il vincolo di controllo in SQL Server e come creare un vincolo di controllo in SQL Server |
Video demo:cos'è il vincolo di controllo e come creare il vincolo di controllo in SQL Server