none
Error columna identity al cargar nuevo dato replica sql server RRS feed

  • Pregunta

  • Buenas tardes, tengo el siguiente error cuando hago una insercion en una tabla replicada

    Una inserción de fila en 'xxx\SQLSERVER.xxx' no se pudo propagar a 'ddd\SQLEXPRESS.Sucursal1'. Puede que una infracción de restricción haya causado este error.  Es necesario especificar un valor explícito para la columna de identidad de la tabla 'productos_stock' cuando IDENTITY_INSERT es ON o cuando un usuario de replicación realiza la inserción en una columna de identidad NOT FOR REPLICATION.

    Las estructuras de las tablas productos y productos_stock son las siguientes:

    CREATE TABLE productos(
    idProducto int NOT NULL identity PRIMARY KEY,
    Codigo varchar(50) NULL,
    idMarca int NULL,
    Nombre varchar(100) NOT NULL,
    ...
    )

    CREATE TABLE productos_stock(
    idProducto int NOT NULL FOREIGN KEY REFERENCES productos(idProducto),
    idProductoStock int NOT NULL IDENTITY PRIMARY KEY,
    idSucursal int NOT NULL FOREIGN KEY REFERENCES sucursales(idSucursal),
    Fecha DATETIME NOT NULL,
    Stock Decimal(8,2)

    )

    Y estos dos TRIGGER

    CREATE TRIGGER tr_suc_AGREGAR_productos_stock
    ON dbo.sucursales
    AFTER INSERT
    AS 
    BEGIN
    SET NOCOUNT ON;

    INSERT INTO productos_stock (idProducto, idSucursal, fecha, Stock)
    SELECT P.idProducto, I.idSucursal, CURRENT_TIMESTAMP,0
    FROM inserted AS I CROSS JOIN dbo.productos as P;

    END

    CREATE TRIGGER AGREGAR_productos_stock
    ON productos
    AFTER INSERT
    AS 
    BEGIN
    SET NOCOUNT ON;

    INSERT INTO productos_stock (idProducto, idSucursal, fecha,Stock)
    SELECT I.idProducto, S.idSucursal, CURRENT_TIMESTAMP,0
    FROM inserted AS I CROSS JOIN sucursales s;
    END

    Para que se inserten automaticamente los productos en cada sucursal cada vez que agrego un producto nuevo.

    Defini ya en cada replica DBCC IDENTITY en distintos rangos pero sigo con el mismo error.

    Este es el resultado de 

    sp_helpconstraint 'productos' en el cliente:

    CHECK on column idProducto repl_identity_range_6563E89C_F3F2_41D6_9633_AC9B15A115A4 (n/a) (n/a) Enabled Not_For_Replication ([idProducto]>(30418) AND [idProducto]<=(31418) OR [idProducto]>(31418) AND [idProducto]<=(32418))

    y Este el resultado en el servidor:

    CHECK on column idProducto repl_identity_range_6563E89C_F3F2_41D6_9633_AC9B15A115A4 (n/a) (n/a) Enabled Not_For_Replication ([idProducto]>(40001) AND [idProducto]<=(41001) OR [idProducto]>(41001) AND [idProducto]<=(42001))

    Saludos


    viernes, 8 de septiembre de 2017 18:55

Respuestas

  • Hola Mauricio, que tal.

    Puedes revisar los stored procedures de replicación para ver como están realizando los updates/inserts/deletes de estas tablas? Mas que nada para ver si están respetando la inserción de las columnas identity.

    Los stored a buscar son:

    • sp_MSins_< tablename >, para inserts.

    • sp_MSupd_< tablename >, para updates.

    • sp_MSdel_< tablename >, paradeletes.

    Saludos.


    Mariano K.

    lunes, 18 de septiembre de 2017 19:59

Todas las respuestas

  • Hola Mauricio Hamak,

    Continuando con el seguimiento a tu consulta, ¿Pudiste resolver el problema? ¿Encontraste alguna solución?

    Cualquier actualización quedamos al pendiente.

    Gracias por usar los foros de MSDN.

    Marco
     _____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 18 de septiembre de 2017 15:57
  • Hola Mauricio, que tal.

    Puedes revisar los stored procedures de replicación para ver como están realizando los updates/inserts/deletes de estas tablas? Mas que nada para ver si están respetando la inserción de las columnas identity.

    Los stored a buscar son:

    • sp_MSins_< tablename >, para inserts.

    • sp_MSupd_< tablename >, para updates.

    • sp_MSdel_< tablename >, paradeletes.

    Saludos.


    Mariano K.

    lunes, 18 de septiembre de 2017 19:59