sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué es la restricción de verificación en SQL Server? Tutorial de SQL Server/TSQL, parte 82

¿Qué es la restricción de verificación:

Las restricciones de verificación limitan los valores aceptados por una o más columnas.


Entendamos la restricción de verificación con el escenario en tiempo real.

Está trabajando como desarrollador de SQL Server. Debe crear la tabla dbo.Customer que debe tener columnas como FName, LName y Address. Como FName será VARCHAR para que los usuarios puedan insertar valores de cadena que pueden contener caracteres alfabéticos, numéricos y otros. Desea escribir una restricción de verificación para que FName solo acepte alfabetos.

Solución:

Vamos a crear la tabla con Verificar restricción usando el siguiente script

--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]%')
)
 
Vamos a insertar algunos registros en la tabla y ver si nuestra restricción de verificación funciona como se esperaba. Debería permitir insertar solo aquellos registros en los que FName solo contenga alfabetos.

--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')
 Cuando ejecuté los scripts de inserción anteriores, a continuación se encuentran los mensajes que recibí de SQL Server.

(1 fila(s) afectada(s))
Msg 547, Level 16, State 0, Line 18
La declaración INSERT entró en conflicto con la restricción CHECK "CK__Customer__FName__5FB337D6". El conflicto ocurrió en la base de datos "YourDatabaseName", tabla "dbo.Customer", columna 'FName'.
La declaración ha finalizado.
Msg 547, Level 16, State 0, Line 22
La instrucción INSERT entró en conflicto con la restricción CHECK "CK__Customer__FName__5FB337D6". El conflicto ocurrió en la base de datos "YourDatabaseName", tabla "dbo.Customer", columna 'FName'.
La instrucción ha finalizado.
Msg 547, Level 16, State 0, Line 26
La instrucción INSERT entró en conflicto con la restricción CHECK "CK__Customer__FName__5FB337D6". El conflicto ocurrió en la base de datos "YourDatabaseName", tabla "dbo.Customer", columna 'FName'.
La declaración ha terminado.

Solo insertó el primer registro que contiene todos los alfabetos para FName, el resto de los registros son rechazados por nuestra restricción de verificación ya que contienen otros caracteres que no sean alfabetos.

Veamos los datos en la tabla para asegurarnos de que solo se inserta un registro.
¿Qué es la restricción de verificación en SQL Server y cómo crear una restricción de verificación en SQL Server?

Video de demostración:¿Qué es la restricción de verificación y cómo crear una restricción de verificación en SQL Server?