none
Crear Trigger para Insertar Datos en Otra Base de Datos

    Question

  • Hola:

    Hace unos dias publique una pregunta de como crear un trigger para apuntarlo a otra tabla, ahora la pregunta es ¿Como crear un trigger que se dispare pero en la tabla de otra Base de Datos, las dos estan en la misma instancia, el problema es que insertanto en una tabla llamada Tickets de la Base de Datos "Vehiculos", tengo que disparar un trigger que ejecute inserccion de datos en 3 Tablas de la Base de Datos "Padron Vehicular".

    Imaginemos que yo soy un agente de transito, y detengo a un conductor por pasarse un alto, evidentemente levanto una multa, esa multa con todos los datos que lleva, tiene que verificar si ese conductor tiene multas anteriores, si el vehiculo esta dado de alta en la BD, su licencia y su tarjeta de circulacion, si esta dado de alta, la multa se llena automaticamente, sino hay que insertarla, entonces, al momento que llene los datos de la multa o del ticket de la multa, el trigger se dispara y se llenan los datos en otras tres tablas.

    Les envio esquema de datos, esquema de tablas y procedimientos almacenados y el trigger de ejemplo.

     

    PROCEDIMIENTO ALMACENADO QUE INSERTA EN TABLA TICKET

    USE [Vehiculos]
    GO
    /****** Object:  StoredProcedure [procInsertarTickets]    Script Date: 12/15/2011 17:14:53 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		Pedro Ignacio Flores
    -- Create date: 2010.06.22
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [procInsertarTickets]
    	-- Add the parameters for the stored procedure here
    	@ticketId int,
    	@licenseplatenumber nvarchar(20),
    	@ticketdate nvarchar(50),
    	@imagen1 nvarchar(255),
    	@imagen2 nvarchar(255)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	DECLARE @amount float
    	SET @amount = (SELECT salariosmin FROM SalariosArticulos where Descripcion = 'Alta Velocidad')
    	SET NOCOUNT ON;
    
        -- Insert statements for procedure here
    	INSERT INTO Ticket(ticketId, officer, reploc, tickettype, amount, licenseplatenumber, detail, ticketdate, imagen1, imagen2) VALUES (@ticketId, '', '', 'g', @amount, @licenseplatenumber, '', @ticketdate, @imagen1, @imagen2)
    END
    
    

    TRIGGER DE EJEMPLO

    USE [PadronVehicular]
    GO
    /****** Object:  Trigger [CallProcedures]    Script Date: 12/15/2011 17:17:32 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [CallProcedures] ON [PadronVehiculos]
        FOR INSERT
    AS
        SET NOCOUNT ON
    
        DECLARE 
            @LicenciaId INT,
            @NoLicencia VARCHAR(150) ,
            @Nombre VARCHAR(50) ,
            @ApellidoPaterno VARCHAR(50) ,
            @ApellidoMaterno VARCHAR(50) ,
            @TipoLicencia VARCHAR(50) ,
            @CURP VARCHAR(18) ,
            @FechaNacimiento VARCHAR(50) ,
            @Nacionalidad VARCHAR(50) ,
            @OficinaExpedicion VARCHAR(50) ,
            @Sexo VARCHAR(10) ,
            @FechaExpedicion VARCHAR(50)  ,
            @Hora VARCHAR(50),
            @Vencimiento VARCHAR (50)  ,
            @Periodo VARCHAR(5) ,
            @Antiguedad VARCHAR(50)
            
        SELECT  @Nombre = inserted.Nombre
        FROM    INSERTED
    
    --Aqui asigna los valores correctos. Estos valores son solo para el ejemplo.
        SET @LicenciaId = 356
        SET @NoLicencia = 490000000576
        SET @Nombre = 'MELANI PAULINA'
        SET @ApellidoPaterno = 'DOMINGUEZ'
        SET @ApellidoMaterno = 'LOAIZA'
        SET @TipoLicencia = 'Automovilista'
        SET @CURP = 'DOLM900207MMCMZL05'
        SET @FechaNacimiento =  cast('20111216 13:00:03' as datetime)
        SET @Nacionalidad = 'MEXICANA'
        SET @OficinaExpedicion = 'ECATEPEC'
        SET @Sexo = 'FEMENINO'
        SET @FechaExpedicion = '2011-03-17 22:32:33'
        SET @Hora = '2011-03-17 22:32:33.050'
        SET @Vencimiento = '2011-03-17 22:32:33.050'
        SET @Periodo = '1 AÑOS'
        SET @Antiguedad = '2011-03-17 22:32:33.050'
    
        EXECUTE dbo.procInsertLicenseList @LicenciaId,@NoLicencia,@Nombre,@ApellidoPaterno,@ApellidoMaterno,@TipoLicencia,@CURP,@FechaNacimiento,@Nacionalidad,@OficinaExpedicion,@Sexo,@FechaExpedicion,@Hora,@Vencimiento,@Periodo,@Antiguedad
        
        

    Gracias

    Thursday, December 15, 2011 11:17 PM

Answers

  • Hola:

    Prueba haciendo EXECUTE PadronVehicular.dbo.procInsertLicenseList ....

    claro tienes que asegurarte que cuando hagas esto tu aplicación tenga

    los permisos para acceder a esta base de datos y ejecutar el procedimiento; por que si se ejecuta por seguridad integrada

    y se maneja seguridad por grupos, podrias tener problemas al ejecutarlo desde otra base de datos,

    bueno seria cuestion de probar...=)

    Saludos.

    Friday, December 16, 2011 5:46 AM