Home Forums SQLServerCentral.com Editorials Are Triggers a "legacy" Feature? (Database Weekly, Nov 08 2008) RE: Are Triggers a "legacy" Feature? (Database Weekly, Nov 08 2008)

  • Was confronted by a trigger just yesterday, wonderful use of nested cursors. Just had to post it as an example.

    It is supplied by a vendor (Sage \ SalesLogix) so dont blame me.

    ALTER TRIGGER [sysdba].[ADDRESS_RECCHANGE] ON [sysdba].[ADDRESS]

    FOR INSERT, UPDATE

    AS

    BEGIN

    DECLARE @recid char(12)

    DECLARE @conid char(12)

    DECLARE @reccount integer

    DECLARE tblCursor CURSOR FOR SELECT ADDRESSID FROM INSERTED

    OPEN tblCursor

    FETCH NEXT from tblCursor INTO @recid

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    DECLARE tblAddr CURSOR FOR SELECT ENTITYID FROM INSERTED

    OPEN tblAddr

    FETCH NEXT from tblAddr INTO @conid

    WHILE (@@FETCH_STATUS = 0)

    BEGIN

    -- delete the old row for this record

    SELECT @reccount = count(1) FROM sysdba.SLXRECCHANGE WHERE (TABLENAME = 'CONTACT') and (ENTITYID = @conid)

    IF (@reccount > 0)

    BEGIN

    DELETE sysdba.SLXRECCHANGE WHERE (TABLENAME = 'CONTACT') and (ENTITYID = @conid)

    END

    -- insert new record into SLXRECCHANGE table

    INSERT INTO sysdba.SLXRECCHANGE (TABLENAME, ENTITYID, MODIFYDATE, CHANGETYPE) VALUES ('CONTACT', @conid, getutcdate(), 'C')

    FETCH NEXT from tblAddr INTO @conid

    END --while

    CLOSE tblAddr

    DEALLOCATE tblAddr

    FETCH NEXT from tblCursor INTO @recid

    END -- while

    CLOSE tblCursor

    DEALLOCATE tblCursor

    END

    Blog: http://crazyemu.wordpress.com/
    Twit: @crazySQL