Pemicu tingkat database dan server tidak dicakup sebagai "objek" per se (inilah sebabnya Anda tidak dapat membuatnya di bawah skema, dan mengapa mereka tidak muncul di dalamnya sys.objects
).
Anda dapat melihat bahwa benda-benda tersebut memiliki batasan-batasan tertentu pada mereka, misalnya dalam satu OBJECTPROPERTY()
dokumen :
Fungsi ini tidak dapat digunakan untuk objek yang tidak dibatasi skema, seperti pemicu bahasa definisi data (DDL) dan pemberitahuan acara.
Dan juga di dalam OBJECTPROPERTYEX()
dokumen :
OBJECTPROPERTYEX tidak dapat digunakan untuk objek yang tidak dibatasi skema, seperti pemicu bahasa definisi data (DDL) dan pemberitahuan acara.
The OBJECT_ID()
docs yang sedikit lebih eksplisit:
Objek yang tidak termasuk skema, seperti pemicu DDL, tidak dapat ditanyakan dengan menggunakan OBJECT_ID. Untuk objek yang tidak ditemukan di tampilan katalog sys.objects, dapatkan nomor identifikasi objek dengan menanyakan tampilan katalog yang sesuai. Misalnya, untuk mengembalikan nomor identifikasi objek pemicu DDL, gunakan SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog
'.
The OBJECT_NAME()
docs kurang eksplisit, namun mereka menyebutkan batasan yang sama secara implisit (penekanan):
Mengembalikan nama objek database untuk objek yang dicakup skema .
Untuk kueri pertama, tidak yakin mengapa Anda perlu mendapatkan nama melalui fungsi, karena name
kolom di sys.triggers
sudah memberi Anda jawaban itu. Untuk kueri kedua, Anda bisa bergabung ke 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];
Anda bisa membuat fungsi Anda sendiri, tentu saja, tetapi saya tidak tahu ada fungsi bawaan yang melakukan korelasi ini untuk Anda (dan saya sarankan tinggal jauh dari fungsi metadata bawaan pada umumnya ).
Pemicu DDL adalah jenis hewan khusus. Jadi jika Anda khawatir juga harus bergabung dengan sys.procedures, sys.views, dll., Jangan.
sys.sql_expression_dependencies
->referenced_id
bergabungsys.objects
?