sql >> Databáze >  >> RDS >> Sqlserver

SQL Server - po vložení triggeru - aktualizujte další sloupec ve stejné tabulce

Závisí to na úrovni rekurze pro spouštěče aktuálně nastavené v DB.

Pokud uděláte toto:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Nebo toto:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Výše uvedený spouštěč nebude znovu vyvolán a budete v bezpečí (pokud se nedostanete do nějaké slepé uličky; to by mohlo být možné, ale možná se mýlím).

Přesto nemám myslím, že je to dobrý nápad. Lepší možností by bylo použití MÍSTO spouštěče . Tímto způsobem byste se vyhnuli provádění první (ruční) aktualizace přes DB. Bude spuštěn pouze ten, který je definován uvnitř spouštěče.

Spouštěč MÍSTO INSERT by vypadal takto:

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

To by automaticky "nahradilo" původní příkaz INSERT tímto příkazem s explicitním voláním UPPER aplikovaným na part_description pole.

Spouštěč MÍSTO AKTUALIZACE by byl podobný (a nedoporučuji vám vytvořit jediný spouštěč, nechte je oddělené).

Také se to týká komentáře @Martin:funguje to pro víceřádkové vložení/aktualizace (váš příklad ne).



  1. Získejte přesný výsledek pro dělení čísel

  2. JBoss se automaticky znovu připojí k databázi při restartu/odpojení databáze

  3. Připojení k mysql v xampp bez hesla

  4. Jak provést hromadné vložení v MySQL?