Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Цикъл на задействане на SQL Server

Не препоръчвам изрично да деактивирате тригера по време на обработка - това може да причини странни странични ефекти.

Най-надеждният начин за откриване (и предотвратяване) на цикли в задействане е да използвате CONTEXT_INFO() .

Пример:

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

Вижте тази връзка за по-подробен пример.

Забележка относно CONTEXT_INFO() в SQL Server 2000:

Контекстната информация се поддържа, но очевидно CONTEXT_INFO функция не е. Вместо това трябва да използвате това:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. сравняване на колона със списък със стойности в t-sql

  2. Връщане на броя на редовете, засегнати от операторите UPDATE

  3. WHERE IN (масив от идентификационни номера)

  4. Не може да се създаде екземпляр на доставчик на OLE DB Microsoft.Jet.OLEDB.4.0 за свързан сървър null

  5. Как да премахнете или изтриете всички тригери от база данни в SQL Server