I trigger T-SQL di Microsoft SQL Server non sono disabilitabili programmaticamente a meno di ricorrere a un "trucchetto" usando la proprietà CONTEXT_INFO della sessione.
Il trucco è creare un trigger che controlla il valore contenuto nella CONTEXT_INFO e, se presente un valore predefinito, uscire senza fare niente.
SQL
CREATE TRIGGER [Trigger[SgartTestTrigger] 
   ON  [TbSgartTestTrigger]
   AFTER INSERT,UPDATE
AS 
BEGIN
  SET NOCOUNT ON;

  DECLARE @ci VARBINARY(128);
  SELECT @ci = Context_Info();
  IF @ci= 0x1EAf111	-- valore costante scelto a caso. se settato tramite  SET CONTEXT_INFO 0x1EAf111 non invoca il trigger
  BEGIN
    PRINT 'DISABILITATO';
    RETURN;
  END 

  PRINT 'ABILITATO';
  --... inserire il codice del trigger ---
END
La normale insert/update farà scattare il trigger:
SQL
INSERT INTO [TbSgartTestTrigger] VALUES('a1');
per non far scattare il trigger invocarlo con:
SQL
-- imposto il contesto valido solo per questa sessione
SET CONTEXT_INFO 0x1EAf111
INSERT INTO [TbSgartTestTrigger] VALUES('a2');
-- resetto il contesto
SET CONTEXT_INFO 0x
Un esempio completo è questo:
SQL
-- creo la tabella di test
CREATE TABLE [TbSgartTestTrigger](
	[code] nvarchar(50) NOT NULL
)
GO

-- aggancio il trigger
CREATE TRIGGER [Trigger[SgartTestTrigger] 
   ON  [TbSgartTestTrigger]
   AFTER INSERT,UPDATE
AS 
BEGIN
  SET NOCOUNT ON;

  DECLARE @ci VARBINARY(128);
  SELECT @ci = Context_Info();
  IF @ci= 0x1EAf111	-- valore costante scelto a caso. se settato tramite  SET CONTEXT_INFO 0x1EAf111 non invoca il trigger
  BEGIN
	PRINT 'DISABILITATO';
    RETURN;
  END 
  --... codice del trigger ---
  PRINT 'ABILITATO';
END
GO

-- faccio la insert con "scatto" del trigger
PRINT 'Test trigger';
INSERT INTO [TbSgartTestTrigger] VALUES('a1');
GO

-- faccio la insert senza "scatto" del trigger
PRINT 'Test disabilitazione trigger';
SET CONTEXT_INFO 0x1EAf111
INSERT INTO [TbSgartTestTrigger] VALUES('a2');
SET CONTEXT_INFO 0x
GO

-- elimino la tabella
DROP TABLE [TbSgartTestTrigger]
GO
che da come risultato
Text
Test trigger
ABILITATO

(1 row(s) affected)
Test disabilitazione trigger
DISABILITATO

(1 row(s) affected)
Potrebbe interessarti anche: