none
trigger que ejecute un insert RRS feed

  • Pregunta

  • buenas tardes., es posible realizar un trigger en una base de datos 'A'  para que cuando se realize un ingreso en ella desencadene un procedure que ingrese datos en una base de datos 'B' diferente??

    Me pódrian poner un ejemplo?:

    miércoles, 5 de enero de 2011 21:33

Respuestas

  • Ok,ok pero y con un procedure como seria??

    BDD_B.dbo.TABLA_B y segun veo debo poner

    labasededatos.dbo.latabla asi es??.

    y el trigger tsaria en la base de datos que desncadena el evento.?

    Saludos.


    Hola,

    Si quieres puedes crear el procedimiento aparte e invocarlo desde el trigger, sería algo como esto por ejemplo:
    --Creas algo como esto en la base de datos donde 
    --se insetaran los datos
    
    Create Procedure sp_inserta
    (
     @id int
    )
    
    As
    
    Insert Into BD2.dbo.T2 Values(@id);
    
    
    --Creas algo como esto en la base de datos donde 
    --se insetaran los datos
    
    Create Trigger Inserta
    On T1
    After Insert
    
    AS
    
    Declare @id int
    
    Set @id = (Select id From Inserted);
    
    exec sp_inserta @id;
    
    
    
    --Las tablas que use fueron (puedes aplicarlo a tu caso):
    
    
    Create Table BD1.dbo.T1
    (
     id int
    )
    
    
    Create Table BD2.dbo.T2
    (
     id int
    )
    
    
    
    --Pruebas con esto:
    
    Insert Into BD1.dbo.T1 Values(1)
    Insert Into BD1.dbo.T1 Values(2)
    Insert Into BD1.dbo.T1 Values(3)
    Insert Into BD1.dbo.T1 Values(4)
    Insert Into BD1.dbo.T1 Values(5)
    
    
    Select *
    From BD2.dbo.T2
    
    


    Esto es una muestra de como podrías hacerlo, en ella puedes ver también el syntax a utilizar.


    Respecto a: labasededatos.dbo.latabla

    Si,  esto es  <Base Datos>.<Esquema>.<Objeto>, no siempre el esquema es dbo, pero si la mayoría de veces.


    Espero que te sirva.


    Willy Taveras.-

    IT Learn - Learning Together

    • Marcado como respuesta Augusto1982 jueves, 6 de enero de 2011 17:04
    jueves, 6 de enero de 2011 2:47
    Moderador
  • Hola,

    Lo que estas haciendo es correcto.

    El mensaje es una advertencia, no un error. Indica que existe dependencia entre los objetos, procedimiento y trigger, en sentido de que el procedimiento funcionara con las variables que declaras dentro del Trigger.

    Ignora el mensaje. Todo funcionara bien.


    Inserta un dato de pruebas en la tabla PersonaMast de la base de datos primavera y luego consulta la tabla base_companies de la base de datos tustenon .



    Dentro del trigger en lugar de:

     

    exec p_insert_basecompanies 
      @pnombrecompleto,
      @ppersona,
      @pdireccion,
      @pdocumento,
      @pnacionalidad,
      @ptelefono,
      @pfax,
      @pcorreoelectronico
    
    

    Pon:

    exec tustenon.dbo.p_insert_basecompanies 
      @pnombrecompleto,
      @ppersona,
      @pdireccion,
      @pdocumento,
      @pnacionalidad,
      @ptelefono,
      @pfax,
      @pcorreoelectronico
    
    --Si la base de datos no es tustenon, pon la correspondiente
    --Si el esquema no es dbo, pon el correspondiente
    


    Espero que te sirva.

     


    Willy Taveras.-

    IT Learn - Learning Together

    • Marcado como respuesta Augusto1982 jueves, 6 de enero de 2011 17:04
    jueves, 6 de enero de 2011 15:55
    Moderador

Todas las respuestas

  •  

    La tabla TABLA_A se encuentra en la base de datos BDD_A y cuando se produce un evento en esta tabla se inserta valores en la base de datos BDD_B en la tabla TABLA_B

    
    CREATE TRIGGER INSERTA_BDD_B_TR 
      ON TABLA_A
      FOR INSERT,DELETE,UPDATE
    AS 
    BEGIN
    
    	SET NOCOUNT ON
    	
    	INSERT INTO BDD_B.dbo.TABLA_B VALUES(Campo1, Campo2, Campo3)
    
    
    END
    GO
    

     

    miércoles, 5 de enero de 2011 23:44
  • Ok,ok pero y con un procedure como seria??

    BDD_B.dbo.TABLA_B y segun veo debo poner

    labasededatos.dbo.latabla asi es??.

    y el trigger tsaria en la base de datos que desncadena el evento.?

    Saludos.

    jueves, 6 de enero de 2011 0:03
  • Ok,ok pero y con un procedure como seria??

    BDD_B.dbo.TABLA_B y segun veo debo poner

    labasededatos.dbo.latabla asi es??.

    y el trigger tsaria en la base de datos que desncadena el evento.?

    Saludos.


    Hola,

    Si quieres puedes crear el procedimiento aparte e invocarlo desde el trigger, sería algo como esto por ejemplo:
    --Creas algo como esto en la base de datos donde 
    --se insetaran los datos
    
    Create Procedure sp_inserta
    (
     @id int
    )
    
    As
    
    Insert Into BD2.dbo.T2 Values(@id);
    
    
    --Creas algo como esto en la base de datos donde 
    --se insetaran los datos
    
    Create Trigger Inserta
    On T1
    After Insert
    
    AS
    
    Declare @id int
    
    Set @id = (Select id From Inserted);
    
    exec sp_inserta @id;
    
    
    
    --Las tablas que use fueron (puedes aplicarlo a tu caso):
    
    
    Create Table BD1.dbo.T1
    (
     id int
    )
    
    
    Create Table BD2.dbo.T2
    (
     id int
    )
    
    
    
    --Pruebas con esto:
    
    Insert Into BD1.dbo.T1 Values(1)
    Insert Into BD1.dbo.T1 Values(2)
    Insert Into BD1.dbo.T1 Values(3)
    Insert Into BD1.dbo.T1 Values(4)
    Insert Into BD1.dbo.T1 Values(5)
    
    
    Select *
    From BD2.dbo.T2
    
    


    Esto es una muestra de como podrías hacerlo, en ella puedes ver también el syntax a utilizar.


    Respecto a: labasededatos.dbo.latabla

    Si,  esto es  <Base Datos>.<Esquema>.<Objeto>, no siempre el esquema es dbo, pero si la mayoría de veces.


    Espero que te sirva.


    Willy Taveras.-

    IT Learn - Learning Together

    • Marcado como respuesta Augusto1982 jueves, 6 de enero de 2011 17:04
    jueves, 6 de enero de 2011 2:47
    Moderador
  • Hola willy Taveras , te mando un poco de codigo aver si me puedes ayudar

    este trigger debe estar en una base de datos llamada primavera

    create trigger tr_Insert_base_companies on PersonaMast
    AFTER
    INSERT
    AS 
    BEGIN
    DECLARE @pnombrecompleto char(100)
    DECLARE @ppersona int
    DECLARE @pdireccion varchar(80)
    DECLARE @pdocumento char(20)
    DECLARE @pnacionalidad char(20)
    DECLARE @ptelefono varchar(40)
    DECLARE @pfax varchar(15)
    DECLARE @pcorreoelectronico varchar(50)
    select @pnombrecompleto=p.nombrecompleto,
        @ppersona=p.persona,
        @pdireccion=p.direccion,
        @pdocumento=p.documento,
        @pnacionalidad=p.nacionalidad,
        @ptelefono=p.telefono,
        @pfax=p.fax,
        @pcorreoelectronico=p.correoelectronico
        from personamast p inner join inserted i
        on p.persona=i.persona
        exec p_insert_basecompanies 
        @pnombrecompleto,
        @ppersona,
        @pdireccion,
        @pdocumento,
        @pnacionalidad,
        @ptelefono,
        @pfax,
        @pcorreoelectronico
    end
    

    y el store que ejecuta en una base de datos llamada tustenon,es decir el p_insert_bsecompanies debe estar en la base de datos llamada tustenon

    el cual va asi

    alter procedure p_insert_basecompanies (
    @pnombrecompleto char(100),
    @ppersona int,
    @pdireccion varchar(80),
    @pdocumento char(20),
    @pnacionalidad char(20),
    @ptelefono varchar(40),
    @pfax varchar(15),
    @pcorreoelectronico varchar(50)
    
    )
    as
    declare @groups varchar(50)
    select @groups='|0|'
    insert base_companies(companyname,companycode,invoicingaddress,
                 invoicingstate,vatid,phone,fax,email,groups) values
    (@pnombrecompleto,@ppersona,@pdireccion,@pdocumento,@pnacionalidad,@ptelefono,@pfax,@pcorreoelectronico,@groups)
    

    pero cuando ejecuto el trigger me sale el error

    Cannot add rows to sysdepends for the current object

    because it depends on the missing object 'p_insert_basecompanies'.

    The object will still be created.

    Como puedo hacer?.

    jueves, 6 de enero de 2011 15:24
  • Hola,

    Lo que estas haciendo es correcto.

    El mensaje es una advertencia, no un error. Indica que existe dependencia entre los objetos, procedimiento y trigger, en sentido de que el procedimiento funcionara con las variables que declaras dentro del Trigger.

    Ignora el mensaje. Todo funcionara bien.


    Inserta un dato de pruebas en la tabla PersonaMast de la base de datos primavera y luego consulta la tabla base_companies de la base de datos tustenon .



    Dentro del trigger en lugar de:

     

    exec p_insert_basecompanies 
      @pnombrecompleto,
      @ppersona,
      @pdireccion,
      @pdocumento,
      @pnacionalidad,
      @ptelefono,
      @pfax,
      @pcorreoelectronico
    
    

    Pon:

    exec tustenon.dbo.p_insert_basecompanies 
      @pnombrecompleto,
      @ppersona,
      @pdireccion,
      @pdocumento,
      @pnacionalidad,
      @ptelefono,
      @pfax,
      @pcorreoelectronico
    
    --Si la base de datos no es tustenon, pon la correspondiente
    --Si el esquema no es dbo, pon el correspondiente
    


    Espero que te sirva.

     


    Willy Taveras.-

    IT Learn - Learning Together

    • Marcado como respuesta Augusto1982 jueves, 6 de enero de 2011 17:04
    jueves, 6 de enero de 2011 15:55
    Moderador