简体   繁体   中英

How to run a SQL statement every time a row is created?

We are using an ERP system which uses SQL Server. There is a function which creates a row 'A' in a specific table and populates it with data from another row 'B' of another table. For some reason the programmer thought, one would need only certain values of 'B' in 'A'. So only the values of some columns in 'B' are copied.

Now I want more columns to be copied than the program copies. The columns are there but they don't get copied.

The program offers a way to run a script before the SQL statement, which creates the row, is executed. So the problem here is, I don't know the id of the row which will be created. And even if I would, the row isn't created yet to alter it.

Is there a way in SQL Server to run a SQL script every time after a row is created in a specific table?

Thanks for the help.

Yes - those are called triggers .

You can write triggers that get fired after INSERT , UPDATE or DELETE - or they can be INSTEAD OF triggers, too - if you need to completely take control of an operation.

In your case, I believe an AFTER INSERT trigger should be just fine:

CREATE TRIGGER TrgCopyAdditionalColumns
ON dbo.TableA
AFTER INSERT 
AS  
    -- the newly inserted row (there could be **multiple!**)
    -- will be stored in the `Inserted` pseudo table, which has the 
    -- exact same structure as your "TableB" table - just pick out
    -- the columns you need to insert into "TableA" from here
    INSERT INTO dbo.TableA (Col1, Col2, ..., ColN)
       SELECT 
           b.Col1, b.Col2, ..., b.ColN
       FROM 
           dbo.TableB AS b
       INNER JOIN
           -- somehow, you need to connect your Table B's rows to the
           -- newly inserted rows for Table A that are present in the 
           -- "Inserted" pseudo table, to get only those rows of data from
           -- Table B that are relevant to the newly inserted Table A rows
           Inserted i ON b.A_ID = i.ID  

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