none
Error con check / restricción en tabla con SQL Server 2014 RRS feed

  • Pregunta

  • Hola,

    Estoy volviendo a realizar recuperar conocimientos en SQL Server que antiguamente había realizado con SQL Server 2008 y ahora estoy con SQL Server 2014.

    Tengo instalado Manager SQL 17.1 todo en castellano / español.

    La cuestión es que una cosa tan simple como poner una restricción en un campo de Date en una tabla, a través de T-SQL me deja, pero si lo intento a través del modo visual y modificando la restricción creada previamente por código, ya me da error.

    No entiendo el motivo de porque me esta ocurriendo este problema.

    He recurrido a coger un disco duro nuevo y realizar una instalación limpia del sistema y nuevamente me ocurre lo mismo.

    Agradecería ayuda al respecto.

    viernes, 4 de agosto de 2017 10:32

Respuestas

  • Son alertas no errores, sobre lo segundo esto se debe de controlar en la aplicación no a nivel de base de datos.

    Normalmente muchas de estas alertas no aparecen cuando es por codigo ya que se considera que se tiene un poco mas de exp para realizar esto.

    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    viernes, 4 de agosto de 2017 18:29
  • Hola Enrique,

    Entendiendo la convención de iconos para los cuadros de diálogo de Windows, el tipo de mensaje es informativo (icono formado por la letra 'i' minúscula encerrado en un circulo azul), pero nota que el mensaje menciona que existe un error, en cualquier caso, ¿de qué nos alerta si la expresión que escribimos es correcta?

    Hace unas horas sospechaba de algo que acabo de corroborar, el mensaje "de alerta" sólo aparece cuando se trata de "tipos nuevos" como date, datetime2, etc, pero no sucede con "tipos anteriores" como datetime, smalldatetime; quizá el editor no fue actualizado para validar las expresiones basadas en "tipos nuevos" pero al ignorar los mensajes "de alerta" el proceso de creación de la restricción se realiza correctamente.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    viernes, 4 de agosto de 2017 19:05
  • Hola Williams,

    Gracias por corroborar que no me sucedía solo a mi, esto ya me tranquiliza en cierta manera.

    Ciertamente estas alertas sucedían e impedían con tipo Date y con otros tipo que no eran fecha no daba problema.

    Cuando se crea desde T-SQL y lo quieres modificar en modo diseño ya con los corchetes y paréntesis no hay problema mientras mantengas la misma instrucción, si realizaba cambios volvía a surgir otra vez el problema aunque no impide guardar los cambios.

    Espero que lo resuelvan para futuras modificaciones desde Microsoft.

    Gracias!!!


    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    sábado, 5 de agosto de 2017 7:54

Todas las respuestas

  • Hola que tal. 

    Dos consultas para ver la raíz del problema:

    1) La tabla entiendo que ya se encuentra previamente al momento de agregar la restricción. Por lo que la pregunta es si ya contiene datos o no?

    2) Al momento de crear la restricción por medio de T-SQL, se incluye la clausula WITH NOCHECK ?

    Y por otro lado, para validar fechas lo ideal es utilizar máscaras para evitar cualquier tipo de conversión de datos:

    CONSTRAINT chk_BirthDate
       CHECK (BIRTHDATE > TO_DATE('2005-08-26', 'yyyy-mm-dd'))
    Saludos!


    Mariano K.

    viernes, 4 de agosto de 2017 12:00
  • Hola Marianok,

    1) si esta creada previamente y no contiene datos aunque aunque haya puesto el comprobar datos existentes a no. Fue una modificación en modo edición visual que si me permitió.

    2) No

    He probado esta opción de poner la fecha con el patrón que indicas y me sucede lo mismo.

    Alguna sugerencia más?

    Gracias!!

    viernes, 4 de agosto de 2017 15:03
  • Que tal! La verdad que no veo una problemática en la acción que realizas.

    Lo único que no descartaría que la versión SSMS 17.1 tenga algún issue con la versión SQL 2014 para la modificación de este tipo de objetos.

    Puedes probar en otra instancia con SQL 2016?

    Saludos.


    Mariano K.

    viernes, 4 de agosto de 2017 15:33
  • Respecto a usar la función TO_DATE() creo que es válido para ORACLE, no para SQL Server.

    En lo personal, nunca he utilizado los editores de diseño para crear objetos de base de datos, intento hacerlo siempre por código t-sql, sin embargo intenté corroborar el ejercicio al que haces mención y efectivamente el "problema" sucede y en las versiones 2008, 2012, 2014 (por probar sólo algunas), desconozco la razón aunque parece "injusto" porque la expresión que escribes es correcta, de hecho, si creas la restricción desde código t-sql y abres el editor verás que la expresión es la misma (bueno, agregando corchetes y paréntesis que no hacen la diferencia para este caso).

    Sin embargo, luego de escribir la expresión y a la pregunta de '¿Desea editar la expresión?' respondo con [No], al pinchar con el puntero del mouse sobre el botón [Cerrar] me vuelve a preguntar lo mismo y vuelvo a responder que [No], al re-intentar cerrar el formulario la pregunta ya no se realiza. Luego habrá una nueva pregunta con advertencia al intentar grabar los cambios al que acepto sin mas y tras ello veo que la restricción está creada y operando tal como se esperaría´.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    viernes, 4 de agosto de 2017 15:51
  • Son alertas no errores, sobre lo segundo esto se debe de controlar en la aplicación no a nivel de base de datos.

    Normalmente muchas de estas alertas no aparecen cuando es por codigo ya que se considera que se tiene un poco mas de exp para realizar esto.

    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    viernes, 4 de agosto de 2017 18:29
  • Hola Enrique,

    Entendiendo la convención de iconos para los cuadros de diálogo de Windows, el tipo de mensaje es informativo (icono formado por la letra 'i' minúscula encerrado en un circulo azul), pero nota que el mensaje menciona que existe un error, en cualquier caso, ¿de qué nos alerta si la expresión que escribimos es correcta?

    Hace unas horas sospechaba de algo que acabo de corroborar, el mensaje "de alerta" sólo aparece cuando se trata de "tipos nuevos" como date, datetime2, etc, pero no sucede con "tipos anteriores" como datetime, smalldatetime; quizá el editor no fue actualizado para validar las expresiones basadas en "tipos nuevos" pero al ignorar los mensajes "de alerta" el proceso de creación de la restricción se realiza correctamente.


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    viernes, 4 de agosto de 2017 19:05
  • Hola Williams,

    Gracias por corroborar que no me sucedía solo a mi, esto ya me tranquiliza en cierta manera.

    Ciertamente estas alertas sucedían e impedían con tipo Date y con otros tipo que no eran fecha no daba problema.

    Cuando se crea desde T-SQL y lo quieres modificar en modo diseño ya con los corchetes y paréntesis no hay problema mientras mantengas la misma instrucción, si realizaba cambios volvía a surgir otra vez el problema aunque no impide guardar los cambios.

    Espero que lo resuelvan para futuras modificaciones desde Microsoft.

    Gracias!!!


    • Marcado como respuesta Moderador M miércoles, 16 de agosto de 2017 18:26
    sábado, 5 de agosto de 2017 7:54