Problemas con trigger distribuido SQL Server

A voz antes que nada, mi problema es el siguiente, tengo 2 tablas una en cada localidad, que tienen los mismos campos, son idénticas, la intención de estas tablas son almacenar los mismos datos tanto en la localidad A como en la localidad B, cada vez que yo guarde en A, debe de guardarse en B, y cada que guarde en B tiene que guardarse en A, previniendo las respuestas, tiene que ser por medio de triggers.
Servidor1.BD.DBO.tablaA      Servidor2.BD.DBO.tablaB
id  | nom                                      id | nom
Una ayuda seria buena
Respuesta
1
(xxxxxx), buenas tardes.
Antes que nada te hago un par de preguntas:
* xq tenes la info duplicada? (para acceder a ese lote de informacion lo podes hacer consultando 1 sola tabla, no veo la necesidad de tener 2 tablas con la misma info, salvo que se este usando algun proceso de DataWarehouse).
* tenes la misma BD en 2 servidores diferentes? o son 2 tablas iguales en 2 BD diferentes?
* el sistema que hace el poblado de las tablas no puedo hacer la insercion en las 2?
* porque lo queres hacer si o si con triggers?? y no por ejemplo con un sp que te pida los datos y los inserte en las 2 tablas?
Más allá de estas consultas y atendiendo a tu petición de forma literal... tenemos el siguiente tema, 2 tablas que tienen que poblarse escuchando novedades mutuamente. Si se inserta en A --> inserta en B, si inserta en B --> inserta en A. A simple vista es fácil con triggers "after insert" pero presta especial atención a las restricciones ya que podría entrar en un bucle de inserción de datos infinito(se inserta A, inserta B, como inserta B, inserta A y así sucesivamente). Yo lo que haría es un after insert en una tabla, A por ejemplo y en la otra un before insert con la restricción not in (select...).
Bueno espero que mis comentarios y sugerencias te sean de utilidad, te pido que de ser así puntúes la respuesta, caso contrario quedo a disposición para seguir adentrándome en tu consulta.
Suerte y éxitos.
Walter
Excelente tu comentario, si, de echo es un proyecto de escuela más que nada, si no ya lo hubiera realizado de otra manera y tienes razón me interesa tal cual lo planteas que los datos de la tabla A vayan a la tabla B y de la B a la A sin hacerse ciclo, por que ese es mi principalproblema, eliminar el ciclo.
estube buscando maneras pero no se me ocurre como solucionarlo intente con algo asi
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER INSERTAR_VER
on productos
AFTER INSERT 
AS
Set XACT_ABORT ON
begin transaction
  declare @idprod int, @nomprod char(50)
  select @idprod= idprod, @nomprod = nomprod from inserted
   if not exists( select * from  SQL2KI2.tigres.DBO.productos where idprod = @idprod)
   begin
    insert into SQL2KI2.tigres.DBO.productos(idprod,nomprod) values (@idprod, @nomprod)
    commit transaction
   end   
  else
   begin
    rollback transaction
   end
--Set XACT_ABORT off
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Este código esta en las dos maquinas
Gracias por la coperacion
Ah ok. Yo lo que había pensado es que uno inserte siempre, osea, cada vez que entra una novedad en A la inserte en B... after insert clásico, pero en el de B hacer un before insert con un sub select en la restricción para que si existe no inserte.
Igual de las 2 formas se puede hacer funcionar... lo importante es como dijimos antes, que los procesos anidados no sean infinitos. Por otro lado, me acabo de dar cuenta que también se le puede poner una constraint unique key sobre el id... si el id lo poblás vos, no tendrías problemas (habría que cachear la excepción para que no falle la ejecución), si es un autonumérico te desentendés de ese campo pero volvés a la recursividad de triggers, y lo volvés a salvar de la misma manera pero solo verificando la no existencia de ese id que vas a insertar.
Otro tema a contemplar es.. que pasa con los id (depende si son nextval o no y si hay UK) en el caso de que inserte en las 2 tablas al mismo tiempo diferentes códigos se te van a trenzar los id, con los nom... y de poder darse este caso habría que reever la restricción de los triggers y la configuración de la tabla, pero por ahí estamos hilando mucho más fino de lo requerido.
Espero no haberte embrollado con la respuesta y haberte dado un par más de opciones para uses la que creas más conveniente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas