Tengo una situación en la que necesito imponer una restricción única en un conjunto de columnas, pero solo para un valor de una columna.restricción única condicional
Así que, por ejemplo, tengo una tabla como Table (ID, Name, RecordStatus).
RecordStatus solo puede tener un valor 1 o 2 (activo o eliminado), y quiero crear una restricción única en (ID, RecordStatus) solo cuando RecordStatus = 1, ya que no me importa si hay múltiples borrados registros con la misma ID.
Además de escribir disparadores, ¿puedo hacer eso?
estoy usando SQL Server 2005.
Este diseño es un dolor común. ¿Ha considerado cambiar el diseño para que los registros "eliminados" teóricamente se eliminen físicamente de la tabla y tal vez se muevan a una tabla de "archivo"? – onedaywhen
... porque la imposibilidad de escribir una restricción ÚNICA para aplicar una clave simple se debe considerar un 'olor a código', OMI. Si no puede cambiar el diseño (SQL DDL) porque muchas otras tablas hacen referencia a esta tabla, entonces apostaría que su SQL DML también sufre como resultado, es decir, debe recordar agregar ... Y Table.RecordStatus = 1 ' a la mayoría de las condiciones de búsqueda y condiciones de participación que involucran esta tabla y experimentar errores sutiles cuando inevitablemente se omite en ocasiones. – onedaywhen