I trigger a livello di database e server non sono definiti come "oggetti" di per sé (per questo motivo non è possibile crearli in uno schema e perché non vengono visualizzati in sys.objects
).
Si può vedere che questi oggetti hanno alcune restrizioni su di loro, per esempio nei OBJECTPROPERTY()
documenti :
Questa funzione non può essere utilizzata per oggetti che non rientrano nell'ambito dello schema, ad esempio trigger DDL (Data Definition Language) e notifiche di eventi.
E allo stesso modo nei OBJECTPROPERTYEX()
documenti :
OBJECTPROPERTYEX non può essere utilizzato per oggetti che non hanno ambito, come i trigger DDL (Data Definition Language) e le notifiche degli eventi.
I OBJECT_ID()
documenti sono un po 'più espliciti:
Gli oggetti non con ambito schema, come i trigger DDL, non possono essere interrogati utilizzando OBJECT_ID. Per gli oggetti che non si trovano nella vista del catalogo sys.objects, ottenere i numeri di identificazione dell'oggetto eseguendo una query sulla vista del catalogo appropriata. Ad esempio, per restituire il numero di identificazione dell'oggetto di un trigger DDL, utilizzare SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog
'.
I OBJECT_NAME()
documenti sono meno espliciti, ma menzionano implicitamente la stessa restrizione (sottolineatura mia):
Restituisce il nome dell'oggetto del database per gli oggetti con ambito schema .
Per la prima query, non sei sicuro del motivo per cui devi ottenere il nome tramite la funzione, poiché la name
colonna in sys.triggers
ti dà già quella risposta. Per la seconda query, puoi semplicemente unirti a sys.triggers
:
SELECT tr.*, ts.*
FROM sys.dm_exec_trigger_stats AS ts
LEFT OUTER JOIN sys.triggers AS tr
ON ts.[object_id] = tr.[object_id];
Potresti creare la tua funzione, ovviamente, ma non conosco nessuna funzione integrata che faccia questa correlazione per te (e in ogni caso ti consiglio di stare alla larga dalle funzioni di metadati integrate ).
I trigger DDL sono una specie di animale speciale. Quindi, se sei preoccupato di dover anche partecipare a sys.procedures, sys.views, ecc., Non farlo.
sys.sql_expression_dependencies
->referenced_id
unirtisys.objects
?