none
Agregar Constraint a una Tabla Existente RRS feed

  • Pregunta

  • Buen día, me gustaría me ayudarán por favor. Verán necesito agregar un constraint a una columna de una tabla ya existente. Este constraint debe hacer que todos los registros de esa columna estén con letras mayúsculas. No tengo muy claro cual sería la manera más correcta de agregar este constraint y si me pudieran ayudar lo agradecería mucho. Gracias
    miércoles, 9 de noviembre de 2016 20:51

Respuestas

  • Si, así es, es necesario porque ese "CS" quiere decir case sensitive, si el collatiion no es sensible a mayúsculas y minúsculas (o como en este caso se hace una conversión) para SQL "HOLA"="hola". Es decir SI

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 10 de noviembre de 2016 15:16
    Moderador
  • si pruebas este código veras que es un ejemplo de como hacerlo en la tabla person.person de AdventureWorks

    BEGIN TRAN
    select * from person.Person where  FirstName collate Modern_Spanish_CS_AS  != UPPER(FirstName ) collate Modern_Spanish_CS_AS  
    UPDATE PERSON.Person SET FirstName=UPPER(FirstName)
    select * from person.Person where  FirstName collate Modern_Spanish_CS_AS  != UPPER(FirstName ) collate Modern_Spanish_CS_AS  
    ALTER TABLE PERSON.PERSON add constraint ck_mayusculas check(FirstName collate Modern_Spanish_CS_AS  = UPPER(FirstName ) collate Modern_Spanish_CS_AS  )
    UPDATE top(10) person.Person set FirstName=LOWER(FirstName)
    ROLLBACK
    
    
    Espero que te sirva


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 10 de noviembre de 2016 10:04
    Moderador

Todas las respuestas

  • Hola,

    por favor amplia un poco mas,

    1) lo que quieres es impedir que entren nuevos valores que no estén en mayúsculas o modificar los que ya están y convertirlos a mayusculas

    2) tu servidor esta configurado en modo Case Sensitive (sensitivo a mayúsculas/minúsculas) o Case Insensitive

    jueves, 10 de noviembre de 2016 9:43
  • si pruebas este código veras que es un ejemplo de como hacerlo en la tabla person.person de AdventureWorks

    BEGIN TRAN
    select * from person.Person where  FirstName collate Modern_Spanish_CS_AS  != UPPER(FirstName ) collate Modern_Spanish_CS_AS  
    UPDATE PERSON.Person SET FirstName=UPPER(FirstName)
    select * from person.Person where  FirstName collate Modern_Spanish_CS_AS  != UPPER(FirstName ) collate Modern_Spanish_CS_AS  
    ALTER TABLE PERSON.PERSON add constraint ck_mayusculas check(FirstName collate Modern_Spanish_CS_AS  = UPPER(FirstName ) collate Modern_Spanish_CS_AS  )
    UPDATE top(10) person.Person set FirstName=LOWER(FirstName)
    ROLLBACK
    
    
    Espero que te sirva


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 10 de noviembre de 2016 10:04
    Moderador
  • Hola

    Veamos deseo que todos los nuevos valores que se registren en determinada columna de mi tabla siempre queden con letras mayúsculas. Adicional a ello también deseo actualizar todo lo que se registró en minúsculas con mayúsculas.

    jueves, 10 de noviembre de 2016 13:18
  • Hola,

    Una consulta si solo deseo que una determinada columna esté en mayúsculas me basta con usar la siguiente sentencia?

    ALTER TABLE PERSON.PERSON add constraint ck_mayusculas check(FirstName collate Modern_Spanish_CS_AS  = UPPER(FirstName )

    jueves, 10 de noviembre de 2016 13:19
  • Es necesario usar lo siguiente?

    Modern_Spanish_CS_AS
    jueves, 10 de noviembre de 2016 13:20
  • Si, así es, es necesario porque ese "CS" quiere decir case sensitive, si el collatiion no es sensible a mayúsculas y minúsculas (o como en este caso se hace una conversión) para SQL "HOLA"="hola". Es decir SI

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 10 de noviembre de 2016 15:16
    Moderador