none
Cambiar valor de una columna que pertenece a una PK RRS feed

  • Pregunta

  • Estimados.

    Es bastante atípica esta solicitud, pero el jefe de proyecto no tiene el tiempo de cambiar el aplicativo.

    Les cuento:

    Existe una tabla con 2 campos, campo1 y campo2

    Actualmente la PK de dicha tabla es campo1 solo registros unicos.

    Y algunos de los registros de Campo2 tienen valores NULL

    Pues bien, se requiere tratar de dar una salida bastante extraña, se hara un UPDATE a 0 a todos los valores NULL del campo2, luego de ello se hara cambiara la PK actual, por una nueva PK compuesta por Campo1 y Campo2, y acá viene el problema:

    Dado que la aplicación para algunos casos inertara registros y en campo2 le enviará el valo NULL se me pide que al momento de insertar se haga un cambio a los NULL por el valor 0.

    A primera vista pienso en un trigger INSTEAD OFF pero no sé si será posible hacer el cambio de los NULL por 0

    Quedo atento a sus valiosos aportes.

    Saludos

    Cristian.


    DBA SQL Server Santiago/Chile

    jueves, 22 de junio de 2017 0:03

Respuestas

  • No veo problema aparente mas allá del requerimiento en sí que como mencionas es "atípico"

    BEGIN    
        INSERT INTO Tabla (Campo1, Campo2)
        SELECT Campo1, COALESCE(Campo2, 0) FROM inserted
    END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator jueves, 22 de junio de 2017 14:00
    • Marcado como respuesta CMAPM jueves, 22 de junio de 2017 15:52
    jueves, 22 de junio de 2017 3:17
  • Lo estoy haciendo de esta manera.

      

    CREATE TRIGGER t_Tabla__Campo2
       ON  Tabla
       INSTEAD OF INSERT
    AS 
    BEGIN

    SET NOCOUNT ON;


    INSERT INTO Tabla
    Select 
    Campo1,ISNULL(Campo2,0) Campo2
    From (Select * From inserted Where Campo2 IS NULL) A
    UNION
    Select  Campo1,Campo2
    From (Select * From inserted Where Campo2 IS NOT NULL) B

    END


    Al ejecutar funciona perfecto, pero no se si podria traer algun problema


    DBA SQL Server Santiago/Chile



    • Editado CMAPM jueves, 22 de junio de 2017 1:23
    • Marcado como respuesta CMAPM jueves, 22 de junio de 2017 15:52
    jueves, 22 de junio de 2017 1:22

Todas las respuestas

  • Lo estoy haciendo de esta manera.

      

    CREATE TRIGGER t_Tabla__Campo2
       ON  Tabla
       INSTEAD OF INSERT
    AS 
    BEGIN

    SET NOCOUNT ON;


    INSERT INTO Tabla
    Select 
    Campo1,ISNULL(Campo2,0) Campo2
    From (Select * From inserted Where Campo2 IS NULL) A
    UNION
    Select  Campo1,Campo2
    From (Select * From inserted Where Campo2 IS NOT NULL) B

    END


    Al ejecutar funciona perfecto, pero no se si podria traer algun problema


    DBA SQL Server Santiago/Chile



    • Editado CMAPM jueves, 22 de junio de 2017 1:23
    • Marcado como respuesta CMAPM jueves, 22 de junio de 2017 15:52
    jueves, 22 de junio de 2017 1:22
  • No veo problema aparente mas allá del requerimiento en sí que como mencionas es "atípico"

    BEGIN    
        INSERT INTO Tabla (Campo1, Campo2)
        SELECT Campo1, COALESCE(Campo2, 0) FROM inserted
    END


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Joyce_ACModerator jueves, 22 de junio de 2017 14:00
    • Marcado como respuesta CMAPM jueves, 22 de junio de 2017 15:52
    jueves, 22 de junio de 2017 3:17
  • Cuando se insertan registros en la tabla, ¿el codigo que hace la inserción mete expresamente un NULL en el campo2, o simplemente omite ese campo? Si fuera el segundo caso, bastaría con que le configures un DEFAULT a la columna, y no se necesitaría el trigger.
    jueves, 22 de junio de 2017 12:03
  • Mete expresamente un NULL pues en otras ocasiones mete algún valor entero (dependiendo de lo que haga la aplicación)

    DBA SQL Server Santiago/Chile

    jueves, 22 de junio de 2017 14:52
  • Si la columna 'Campo2' va a formar parte de una clave primaria debería tener la restricción NOT NULL, por lo mismo creo que no aplicaría agregar la restricción DEFAULT.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 22 de junio de 2017 15:20