sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - efter insert trigger - uppdatera ytterligare en kolumn i samma tabell

Det beror på rekursionsnivån för triggers som för närvarande är inställda på DB.

Om du gör detta:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Eller det här:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Den utlösaren ovan kommer inte att anropas igen, och du skulle vara säker (såvida du inte hamnar i någon form av dödläge; det kan vara möjligt men jag kanske har fel).

Ändå gör jag inte det tycker att detta är en bra idé. Ett bättre alternativ skulle vara att använda en I STÄLLET FÖR trigger . På så sätt skulle du undvika att utföra den första (manuella) uppdateringen över DB. Endast den som definierats inuti utlösaren skulle exekveras.

En utlösare I STÄLLET FÖR INSERT skulle vara så här:

CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO part_numbers (
        colA,
        colB,
        part_description
    ) SELECT
        colA,
        colB,
        UPPER(part_description)
    ) FROM
        INSERTED
END
GO

Detta skulle automagiskt "ersätta" den ursprungliga INSERT-satsen med den här, med ett explicit UPPER-anrop applicerat på part_description fältet.

En utlösare I STÄLLET FÖR UPPDATERING skulle vara liknande (och jag råder dig inte att skapa en enda utlösare, håll dem åtskilda).

Detta adresserar också @Martin-kommentaren:det fungerar för infogning/uppdateringar med flera rader (ditt exempel gör det inte).



  1. Värde från senast infogade rad i DB

  2. Finns det ett mer effektivt sätt att göra paginering i Hibernate än att köra urvals- och räkningsfrågor?

  3. Hur kan jag göra en FULLSTÄNDIG OUTER JOIN i MySQL?

  4. PostgreSQL 9.1 primärnyckel autoinkrement