简体   繁体   中英

After update trigger not updating specific row of data in SQL table

Fairly new to SQL here... I am trying to get an 'after update' trigger in SQL Server to update a column ( rig_ident ) whenever another column ( rig_id ) is updated. rig_ident is found by searching the rig_log table.

With the below code it works, but I'm worried it may be running through every row in the table and checking accordingly, which would be a waste of processing and time! Can anyone provide suggestions on how to do this properly?

ALTER TRIGGER engineer_log_onUpdate_trig 
ON engineer_log 
AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    IF (UPDATE(rig_id))
    BEGIN
        DECLARE @rigNum AS int
        DECLARE @rigId AS int

        SELECT @rigNum = i.rig_id 
        FROM inserted i --get the updated rig id value

         --get the required rig ident value from rig_log table...
        SELECT @rigId = ident 
        FROM rig_log 
        WHERE rig_id = @rigNum

        --try to update the rig_ident column of the row the user is updating...
        UPDATE engineer_log 
        SET rig_ident = @rigId 
        WHERE rig_id = @rigNum
    END
END

Your trigger is broken (as the comment suggests) because you are assuming that only one row is being updated/inserted. But SQL Server triggers work on sets of rows, not on individual rows.

I think you can replace the logic with:

UPDATE el 
    SET rig_ident = rl.ident
    FROM engineer_log el JOIN
         rig_log rl
         ON rl.rig_id = el.rig_id JOIN
         inserted i
         ON i.rig_id = rl.rig_id
    WHERE rig_id = @rigNum;

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