简体   繁体   中英

Syntax for SQL Trigger to Insert Data in another DB and also to update any field in another db adfter a field is edited

Here is the scenario - I will be specific. I have a "bridged" DB on Sql Called [Fulcrum_Xfer] I use this bridged because the Main Db called [Fulcrum UAT] is using a bigint datatype for some fields and thereby displaying in my Access front end " #Deleted data " in all fields - This behavior CANNOT be changed in the present design (the bigint has to stay) so I have the exact table name and fieldnames in my [Fulcrum_Xfer] DB - the OrderNO field in Orders table in [Fulcrum_Xfer] is int and there is no primary key

What I need to have done by tomorrow under threat of some "you let us down" is the following

the table that initially gets data inserted or updated into is called Orders and is in the [Fulcrum_Xfer] database that structure is as follows

OrderNo                int              Unchecked
OrderDate              smalldatetime    Unchecked
ApplicationTenantLinkId int             Unchecked
OrderStatus             int             Unchecked

the table that receives the triggered data from Orders in FulCrum_Xfer is called Orders and it is in Database Fulcrum UAT The structure is

OrderNo                bigint           Unchecked  Primarykey 
OrderDate              smalldatetime    Unchecked
ApplicationTenantLinkId Bigint          Unchecked
OrderStatus             int             Unchecked

I need two trigger statements that will insert a new record into Orders in [Fulcrum UAT] after I insert it into Orders in [FulCrum_Xfer]

and

I need a trigger that will update any field in Orders in [Fulcrum UAT] when I make a change in Orders in [Fulcrum_Xfer]

I do not know where the trigger goes other than maybe Database Triggers in [FulCrum_XFer] but I get freaked out by the template syntax (do not think I need all that) and I do not know how to write the syntax for each task

I am a very experienced VB / VBA developer and have used ADO for building and calling stored procedures on SQL but have never had to do this type of task on the SQL Server - please do not treat me like a dunce - but this is very important in my job right now.

Well, of cousre I have no way to test it, but I think this is how you'd write the INSERT trigger:

USE [Fulcrum_Xfer]
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER dbo.trOrders_Insert 
   ON  dbo.Orders
   AFTER INSERT AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Just INSERT everything from the [inserted] pseudotable into
    --the target table
    INSERT INTO [Fulcrum UAT].dbo.Orders 
              (OrderNo, OrderDate, ApplicationTenantLinkId, OrderStatus)
        SELECT OrderNo, OrderDate, ApplicationTenantLinkId, OrderStatus
        FROM   inserted;

END
GO

Copy and paste this into a Query window in Management Studio and execute it.

Here's how I'd do the UPDATE trigger. Again, untested ...

USE [Fulcrum_Xfer]
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER dbo.trOrders_Update 
   ON  dbo.Orders
   AFTER UPDATE AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Just UPDATE everything matching [inserted] pseudotable 
    --into the target table
    --(NOTE: This assumes that UPDATES will never change the PK/OrderNo)
    UPDATE [Fulcrum UAT].dbo.Orders 
        SET OrderDate   = ins.OrderDate, 
            ApplicationTenantLinkId
                        = ins.ApplicationTenantLinkId, 
            OrderStatus = ins.OrderStatus
        FROM [Fulcrum UAT].dbo.Orders As tar
        JOIN inserted as ins ON tar.OrderNo = ins.OrderNo;
    --(also, performance may not be great as the JOIN columns are 
    --  different datatypes)
END
GO

Given:

  • Database db1 with table t1 and fields ( username1 , password1 )
  • Database db2 with table t2 and fields ( username2 , password2 )

If you want insert or update t2 in db2 when changes (assume insert) occurred in db1 , you should add trigger to t1 in db1 :

CREATE TRIGGER `trigger_name` AFTER INSERT ON `t1` 
FOR EACH ROW INSERT INTO `db2`.`t2`( `username2`, `password2`)
VALUES ( new.username1, new.password1)

(I am assuming both databases are hosted on the same server.)

Try This

USE BioStar;// Which data base you want to create trigger
GO 
CREATE TRIGGER trgAfterInsertnew ON [dbo].[TB_EVENT_LOG] 
FOR INSERT
AS
    declare @nDateTime int;
    declare @nReaderIdn int;
    declare @nEventIdn int;
    declare @nUserID int;
    declare @nIsLog smallint;
    declare @nTNAEvent smallint;
    declare @nIsUseTA smallint;
    declare @nType smallint;


    select @nDateTime=i.nDateTime from inserted i;  
    select @nDateTime=i.nReaderIdn from inserted i; 
    select @nEventIdn=i.nEventIdn from inserted i;  
    select @nUserID=i.nUserID from inserted i;

    select @nIsLog=i.nIsLog from inserted i;    
    select @nTNAEvent=i.nTNAEvent from inserted i;  
    select @nIsUseTA=i.nIsUseTA from inserted i;    
    select @nType=i.nType from inserted i;
    insert into [HRM].dbo.Device_Data
           (nDateTime,nReaderIdn,nEventIdn,nUserID,nIsLog,nTNAEvent,nIsUseTA,nType) 
    values(@nDateTime,@nDateTime,@nEventIdn,@nUserID,@nIsLog,@nTNAEvent,@nIsUseTA,@nType);


    --set @audit_action='Inserted Record -- After Insert Trigger.';
        PRINT 'AFTER DELETE TRIGGER fired.'
GO

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM