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

restricción única condicional

He aquí, el índice filtrado. De la documentación (énfasis mío):

Un índice filtrado es un índice no agrupado optimizado especialmente adecuado para cubrir consultas que seleccionan de un subconjunto de datos bien definido. Utiliza un predicado de filtro para indexar una parte de las filas de la tabla. Un índice filtrado bien diseñado puede mejorar el rendimiento de las consultas y reducir los costos de mantenimiento y almacenamiento del índice en comparación con los índices de tabla completa.

Y aquí hay un ejemplo que combina un índice único con un predicado de filtro:

create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;

Esto esencialmente impone la singularidad de ID cuando RecordStatus es 1 .

Después de la creación de ese índice, una violación de unicidad generará un error:

Mensaje 2601, Nivel 14, Estado 1, Línea 13
No se puede insertar una fila de clave duplicada en el objeto 'dbo.MyTable' con el índice único 'MyIndex'. El valor de la clave duplicada es (9999).

Nota:el índice filtrado se introdujo en SQL Server 2008. Para versiones anteriores de SQL Server, consulte esta respuesta.