none
Propiedad unique no acepta valores nulos RRS feed

  • Pregunta

  • Hola a todos, tengo una tabla donde tengo dos campos que necesito que sean unicos y que acepte valores null, mi campo se llama CURP, asi que hice un constraint unique, pero no me acepta mas de dos valores null, es decir, solo me permite un campo null

    He hecho el constraint de varias formas "CURP NVARCHAR(18) UNIQUE"  ó  "CURP NVARCHAR(18) CONSTRAINT UQ_Curp"  y como la inserción de datos la hago con un procedimiento almacenado, a mi parámetro lo  declaro así "@CURP NVARCHAR(18) = NULL"

    Alguien sabe por que tengo ese error?

    Gracias

    sábado, 3 de junio de 2017 2:31

Respuestas

  • Creo que lo más claro es mencionar que no los considera. Un índice filtrado utiliza una porción de filas de la tabla según la expresión de filtro que hayas escrito, en tu caso el índice UNIQUE aplica únicamente para los valores -de la columna CURP- que no sean NULL.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 3 de junio de 2017 17:41
  • Es de esperar que la(s) columna(s) que participan en un índice único deban de tener la restricción NOT NULL dado que más de un valor NULL infringe la restricción de unicidad.

    Para el caso que presentas puedes definir un índice filtrado para discriminar los valores NULL, por ejemplo:

    CREATE UNIQUE NONCLUSTERED INDEX IX_NombreIndice ON dbo.NombreTabla(CURP)
        WHERE CURP IS NOT NULL;
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 3 de junio de 2017 4:26

Todas las respuestas

  • Es de esperar que la(s) columna(s) que participan en un índice único deban de tener la restricción NOT NULL dado que más de un valor NULL infringe la restricción de unicidad.

    Para el caso que presentas puedes definir un índice filtrado para discriminar los valores NULL, por ejemplo:

    CREATE UNIQUE NONCLUSTERED INDEX IX_NombreIndice ON dbo.NombreTabla(CURP)
        WHERE CURP IS NOT NULL;
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 3 de junio de 2017 4:26
  • Hola Willams, gracias por responder, es que se me hacia raro porque estuve buscando y vi que UNIQUE acepta valores null se me hacia muy raro, pero gracias por sacarme de mi error. La instrucción que proporcionaste, rechaza los valores null ?

    sábado, 3 de junio de 2017 5:20
  • Creo que lo más claro es mencionar que no los considera. Un índice filtrado utiliza una porción de filas de la tabla según la expresión de filtro que hayas escrito, en tu caso el índice UNIQUE aplica únicamente para los valores -de la columna CURP- que no sean NULL.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 3 de junio de 2017 17:41