列出数据库中的所有触发器

时间:2010-06-14 18:44:15

标签: vb.net smo

是否可以在数据库的所有表中列出所有触发器? 我可以列出所有用户存储过程:

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)。

2 个答案:

答案 0 :(得分:3)

https://social.msdn.microsoft.com/forums/sqlserver/en-US/bb024fd6-c0b9-441a-864e-a579fc441267/list-databasetable-triggers-via-smo

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
}}

玩得开心。