Trigger auf Datenbank- und Serverebene gelten nicht als "Objekte" an sich (aus diesem Grund können Sie sie nicht unter einem Schema erstellen und werden in nicht angezeigt sys.objects
).
Sie können sehen, dass diese Objekte bestimmte Einschränkungen aufweisen, z. B. in den OBJECTPROPERTY()
Dokumenten :
Diese Funktion kann nicht für Objekte verwendet werden, die keinen Schemabereich haben, z. B. DDL-Trigger (Data Definition Language) und Ereignisbenachrichtigungen.
Und ähnlich in den OBJECTPROPERTYEX()
Dokumenten :
OBJECTPROPERTYEX kann nicht für Objekte verwendet werden, die keinen Schemabereich haben, z. B. DDL-Trigger (Data Definition Language) und Ereignisbenachrichtigungen.
Die OBJECT_ID()
Dokumente sind etwas expliziter:
Objekte, die keinen Schemabereich haben, wie z. B. DDL-Trigger, können nicht mit OBJECT_ID abgefragt werden. Für Objekte, die nicht in der Katalogansicht sys.objects gefunden werden, erhalten Sie die Objektidentifikationsnummern, indem Sie die entsprechende Katalogansicht abfragen. Verwenden Sie beispielsweise ', um die Objektidentifikationsnummer eines DDL-Triggers zurückzugeben SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog
.
Die OBJECT_NAME()
Dokumente sind weniger explizit, erwähnen jedoch implizit dieselbe Einschränkung (Hervorhebung von mir):
Gibt den Datenbankobjektnamen für Objekte mit Schemabereich zurück .
Bei der ersten Abfrage sind Sie sich nicht sicher, warum Sie den Namen über die Funktion abrufen müssen, da die name
Spalte in sys.triggers
Ihnen diese Antwort bereits gibt. Bei der zweiten Abfrage können Sie einfach beitreten zu 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];
Sie könnten natürlich Ihre eigene Funktion erstellen, aber ich kenne keine integrierten Funktionen, die diese Korrelation für Sie übernehmen (und ich empfehle, sich generell von integrierten Metadatenfunktionen fernzuhalten ).
DDL-Trigger sind eine Art besonderes Tier. Wenn Sie sich also Sorgen machen, dass Sie auch sys.procedures, sys.views usw. beitreten müssen, tun Sie dies nicht.
sys.sql_expression_dependencies
->referenced_id
beitretensys.objects
?