Les déclencheurs au niveau de la base de données et du serveur ne sont pas considérés comme des "objets" en soi (c'est pourquoi vous ne pouvez pas les créer sous un schéma et pourquoi ils n'apparaissent pas dans sys.objects
).
Vous pouvez voir que ces objets ont certaines restrictions, par exemple dans les OBJECTPROPERTY()
documents :
Cette fonction ne peut pas être utilisée pour des objets qui ne sont pas limités au schéma, tels que les déclencheurs DDL (Data Definition Language) et les notifications d'événements.
Et de même dans les OBJECTPROPERTYEX()
documents :
OBJECTPROPERTYEX ne peut pas être utilisé pour des objets qui ne sont pas à portée de schéma, tels que les déclencheurs DDL (Data Definition Language) et les notifications d'événements.
Les OBJECT_ID()
documents sont un peu plus explicites:
Les objets qui ne sont pas limités au schéma, tels que les déclencheurs DDL, ne peuvent pas être interrogés à l'aide de OBJECT_ID. Pour les objets qui ne se trouvent pas dans la vue de catalogue sys.objects, obtenez les numéros d'identification d'objet en interrogeant la vue de catalogue appropriée. Par exemple, pour renvoyer le numéro d'identification d'objet d'un déclencheur DDL, utilisez SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog
'.
Les OBJECT_NAME()
documents sont moins explicites, mais ils mentionnent implicitement la même restriction (c'est moi qui souligne):
Renvoie le nom de l'objet de base de données pour les objets à portée de schéma .
Pour la première requête, vous ne savez pas pourquoi vous devez obtenir le nom via la fonction, car la name
colonne dans sys.triggers
vous donne déjà cette réponse. Pour la deuxième requête, vous pouvez simplement vous joindre à 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];
Vous pouvez créer votre propre fonction, bien sûr, mais je ne connais aucune fonction intégrée qui fasse cette corrélation pour vous (et je recommande de rester loin des fonctions de métadonnées intégrées en général de toute façon ).
Les déclencheurs DDL sont une sorte d'animal spécial. Donc, si vous avez peur de devoir également vous inscrire à sys.procedures, sys.views, etc., ne le faites pas.
sys.sql_expression_dependencies
-> dereferenced_id
rejoindresys.objects
?