Ich habe einen Datenbank-Trigger , mit dem ich verhindern kann, dass bestimmte Prozeduren in Benutzerdatenbanken erstellt werden.
Es erscheint in sys.triggers
, mit einem object_id
, aber ich kann die object_id
Funktion nicht verwenden , um es zu finden.
SELECT OBJECT_ID(t.name, t.type) AS object_id, *
FROM sys.triggers AS t;
Ebenso kann ich es in finden sys.dm_exec_trigger_stats
. Ich kann mich nicht object_name
auflösen, object_definition
tut es aber .
SELECT OBJECT_NAME(dets.object_id, dets.database_id) AS object_name,
OBJECT_DEFINITION(dets.object_id) AS object_definition,
*
FROM sys.dm_exec_trigger_stats AS dets;
Gibt es eine Funktion, die die Objekt-ID eines Triggers auf Datenbankebene akzeptiert und dessen Namen zurückgibt?
sql-server
trigger
metadata
ddl-trigger
Erik Darling
quelle
quelle
sys.sql_expression_dependencies
->referenced_id
beitretensys.objects
?parent_id
laut bol zBobject_id(object_name(parent_id))
Antworten:
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 :Und ähnlich in den
OBJECTPROPERTYEX()
Dokumenten :Die
OBJECT_ID()
Dokumente sind etwas expliziter:Die
OBJECT_NAME()
Dokumente sind weniger explizit, erwähnen jedoch implizit dieselbe Einschränkung (Hervorhebung von mir):Bei der ersten Abfrage sind Sie sich nicht sicher, warum Sie den Namen über die Funktion abrufen müssen, da die
name
Spalte insys.triggers
Ihnen diese Antwort bereits gibt. Bei der zweiten Abfrage können Sie einfach beitreten zusys.triggers
: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.
quelle