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

SQL Server Trigger loop

Jeg anbefaler ikke, at du eksplicit deaktiverer triggeren under behandlingen - dette kan forårsage mærkelige bivirkninger.

Den mest pålidelige måde at detektere (og forhindre) cyklusser i en trigger på er at bruge CONTEXT_INFO() .

Eksempel:

CREATE TRIGGER tr_Table1_Update
ON Table1
FOR UPDATE AS

DECLARE @ctx VARBINARY(128) 
SELECT @ctx = CONTEXT_INFO() 
IF @ctx = 0xFF
    RETURN

SET @ctx = 0xFF

-- Trigger logic goes here

Se dette link for et mere detaljeret eksempel.

Bemærkning om CONTEXT_INFO() i SQL Server 2000:

Kontekstoplysninger er understøttet, men tilsyneladende CONTEXT_INFO funktion er ikke. Du skal bruge dette i stedet:

SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID


  1. Postgres-fejl:Mere end én række returneret af en underforespørgsel, der bruges som et udtryk

  2. Genopretter MySQL ved timeout

  3. Hvad betyder det at vælge 1 fra tabellen?

  4. Gendan en database i SQL Server 2017