代码之家  ›  专栏  ›  技术社区  ›  madlan

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

  •  0
  • madlan  · 技术社区  · 14 年前

    是否可以列出数据库中所有表中的所有触发器?

    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\u tablename、INS\u tablename、UPD\u tablename)的任何触发器。

    2 回复  |  直到 14 年前
        1
  •  0
  •   blorkfish    14 年前

    每个数据库对象都有一个Triggers属性,您可以通过迭代来查找所有触发器。
    一旦有了对此触发器的引用,请检查IsSystemObject属性以检查它是否是用户定义的触发器。

    foreach ( DatabaseDdlTrigger oTrigger in oDatabase.Triggers) {
    if (! oTrigger.IsSystemObject) {
        // do something
    }}
    

        2
  •  3
  •   Sevin7 erikkallen    9 年前

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

    DatabaseDdlTrigger对象表示在SQL Server数据库上创建的数据定义语言(DDL)触发器。但是,根据您的描述,我认为您需要迭代在SQLServer表上创建的数据操作语言(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