Trigger & Table Name

Published 12 luglio 09 09.17 | abenedetti

Un paio di giorni fa ho ricevuto questa domanda (sinceramente, non me l’aveva mai fatta nessuno prima :-)): “come posso, dall’interno di un trigger, conoscere il nome della tabella che lo ha scatenato?”.

Ci sono almeno tre modi diversi, tramite le vista:

  1. sys.sysobjects
  2. sys.triggers
  3. sys.dm_tran_locks

Ad esempio:

USE tempdb
GO

/* setup */
CREATE TABLE test
(
   
colonna INT
)
GO

/* trigger */
CREATE TRIGGER trInsertTest ON test 
FOR INSERT
AS
BEGIN
   
/* 1 */
   
SELECT OBJECT_NAME(resource_associated_entity_id) AS tableName
   
FROM sys.dm_tran_locks 
   
WHERE 
       
request_session_id = @@spid AND 
       
resource_type = 'OBJECT'

   
/* 2 */
   
SELECT 
       
OBJECT_NAME(parent_id) AS tableName,
       
OBJECT_NAME(@@PROCID) AS triggerName
   
FROM sys.triggers
   
WHERE name = OBJECT_NAME(@@PROCID) 

   
/* 3 */
   
SELECT 
       
OBJECT_NAME(parent_obj) AS TABNAME 
   
FROM sys.sysobjects 
   
WHERE id = @@PROCID
END
GO

/* insert per test */
INSERT test VALUES (10)
GO

/* cleanup */
DROP TRIGGER trInsertTest
DROP TABLE test
GO
Filed under: ,

Comments

No Comments

This Blog

Syndication