sql >> Database >  >> RDS >> Sqlserver

SQL Server - na invoegen trigger - update een andere kolom in dezelfde tabel

Het hangt af van het recursieniveau voor triggers die momenteel op de DB zijn ingesteld.

Als je dit doet:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Of dit:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Die trigger hierboven zal niet opnieuw worden aangeroepen en je zou veilig zijn (tenzij je in een soort impasse raakt; dat zou mogelijk kunnen zijn, maar misschien heb ik het mis).

Toch niet denk dat dit een goed idee is. Een betere optie zou het gebruik van een IN PLAATS VAN trigger zijn . Op die manier vermijdt u het uitvoeren van de eerste (handmatige) update via de DB. Alleen degene die binnen de trigger is gedefinieerd, wordt uitgevoerd.

Een INSTEAD OF INSERT-trigger zou er als volgt uitzien:

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

Dit zou automatisch de originele INSERT-instructie "vervangen" door deze, met een expliciete UPPER-aanroep toegepast op de part_description veld.

Een trigger IN PLAATS VAN UPDATE zou vergelijkbaar zijn (en ik raad u niet aan om een ​​enkele trigger te maken, deze gescheiden te houden).

Dit adresseert ook de opmerking van @Martin:het werkt voor inserts/updates van meerdere rijen (uw voorbeeld niet).



  1. Hoe de tabelopslag-engine van MyISAM naar InnoDB te veranderen?

  2. veel-op-veel-relatie OrderBy - Laravel-querybuilder

  3. mysql-server is verdwenen fout tijdens het installeren van migratie (laravel)

  4. SQL selecteer waar niet in subquery geeft geen resultaten