是否可以在数据库的所有表中列出所有触发器? 我可以列出所有用户存储过程:
Private Sub StoredPro()
Dim theServer As Server = New Server(serverName)
Dim myDB As Database = theServer.Databases("mydatabase")
Dim dt As DataTable = myDB.EnumObjects(DatabaseObjectTypes.StoredProcedure)
End Sub
但在SMO中没有明显的触发器。 (我实际上是在所选数据库中尝试列出自定义触发器,任何未命名的DEL_tablename,INS_tablename,UPD_tablename)。
答案 0 :(得分:3)
DatabaseDdlTrigger对象表示在SQL Server数据库上创建的数据定义语言(DDL)触发器。但是,根据您的描述,我认为您希望迭代在SQL Server表上创建的数据操作语言(DML)触发器。
请参阅以下示例:
Dim srv As New Server
Dim db As Database = srv.Databases.Item("Northwind")
Dim tb As Table
For Each tb In db.Tables
Dim trg As Trigger
For Each trg In tb.Triggers
If (((trg.Name <> ("INS_" & tb.Name)) AndAlso (trg.Name <> ("DEL_" & tb.Name))) AndAlso (trg.Name <> ("UPD_" & tb.Name))) Then
MessageBox.Show(trg.Name)
End If
Next
Next
答案 1 :(得分:0)
每个数据库对象都有一个Triggers属性,您可以迭代该属性以查找所有触发器
一旦引用了此触发器,请检查IsSystemObject属性以检查它是否是用户定义的触发器。
foreach ( DatabaseDdlTrigger oTrigger in oDatabase.Triggers) {
if (! oTrigger.IsSystemObject) {
// do something
}}
玩得开心。