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

Cómo crear una restricción única en varias columnas en SQL Server - Tutorial de SQL Server / TSQL, parte 96

Escenario:

Está trabajando como desarrollador de SQL Server, se le pide que proporcione scripts de creación para la tabla dbo.Customer con Restricción única en las columnas Nombre y Apellido.

Solución:

Como sabemos, la Restricción única en SQL Server se crea en una columna o columnas para restringir la(s) columna(s) para que acepten solo valores únicos.

El siguiente script se puede usar para crear Restricciones únicas en varias columnas en nuestro caso, Nombre y Apellido.

USE [YourDatabaseName]
GO
CREATE TABLE [dbo].[Customer](
    [FirstName] [varchar](50) NULL,
    [LastName] [varchar](50) NULL,
    [SSN] VARCHAR(11),
    Constraint UQ_Dbo_Customer_FName_LName Unique(FirstName,LastName)
) 

--Let's insert some sample data to test Unique Constraint 
Insert into dbo.Customer(FirstName,LastName,SSN)
Values(Null,Null,'000-00-0000'),
('Aamir',Null,'000-00-0000'),
(Null,'Aamir','000-00-0000')
,('Aamir','Shahzad','000-00-0001')
,('Raza','M','000-00-0002')
 
 Si ha notado la declaración de inserción, en el primer registro he puesto valores nulos para FirstName y Last Name. En el segundo registro, utilicé el valor 'Aamir' para el nombre y Nulo para el apellido. En el 3er registro viceversa del 2do registro. A partir de aquí, entendemos que la restricción única está funcionando en ambos valores de columna. Siempre que el valor combinado de ambas columnas sea único, nos permitirá insertar incluso uno de ellos es nulo.

Si quisiera insertar otro registro en el que tengo Nulo para el apellido , me lo permitirá sin ningún problema, ya que es único de los valores existentes.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 
 Verifiquemos los registros en la tabla usando la consulta de selección.
Cómo agregar restricciones únicas en varias columnas en la tabla de SQL Server
Si intentamos insertar registros duplicados, obtendremos el siguiente error.

Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000')
 
 Mensaje 2627, nivel 14, estado 1, línea 30 Violación de la restricción de CLAVE ÚNICA 'UQ_Dbo_Customer_FName_LName'. No se puede insertar una clave duplicada en el objeto 'dbo.Customer'. El valor de la clave duplicada es (Raza, ). La declaración ha sido terminada.



Demostración en video:Cree una restricción única en varias columnas en SQL Server