sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server - efter insert trigger - opdatere en anden kolonne i samme tabel

Det afhænger af rekursionsniveauet for triggere, der aktuelt er indstillet på DB.

Hvis du gør dette:

SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO

Eller denne:

ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF

Den udløser ovenfor vil ikke blive kaldt igen, og du ville være sikker (medmindre du kommer i en form for dødvande; det kunne være muligt, men måske tager jeg fejl).

Alligevel gør jeg ikke synes det er en god idé. En bedre mulighed ville være at bruge en I STEDET FOR trigger . På den måde ville du undgå at udføre den første (manuelle) opdatering over DB'en. Kun den, der er defineret inde i triggeren, vil blive udført.

En ISTEAD FOR INSERT-trigger ville være sådan her:

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

Dette ville automagisk "erstatte" den originale INSERT-sætning med denne, med et eksplicit UPPER-kald anvendt på part_description felt.

En I STEDET FOR OPDATERING-trigger ville være ens (og jeg råder dig ikke til at oprette en enkelt trigger, hold dem adskilt).

Dette adresserer også @Martin-kommentaren:det virker for indsættelser/opdateringer med flere rækker (dit eksempel gør det ikke).



  1. Hvordan bestemmer du, om du bruger SSL i en MySql-forbindelse?

  2. mysqli_connect():(HY000/2002):Forbindelsen fik timeout på hosting

  3. Oprettelse af databasevedligeholdelsesplaner

  4. Løsninger til INSERT OR UPDATE på SQL Server