0

データベース上のすべてのテーブルのすべてのトリガーを一覧表示することはできますか? すべてのユーザー ストアド プロシージャを次のように一覧表示できます。

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 という名前が付いていないものはすべてリストします)。

4

2 に答える 2

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
于 2015-04-16T17:49:27.800 に答える
0

各データベース オブジェクトには Triggers プロパティがあり、これを繰り返してすべてのトリガーを見つけることができます。
このトリガーへの参照を取得したら、IsSystemObject プロパティを調べて、それがユーザー定義のトリガーかどうかを確認します。

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

楽しむ。

于 2010-07-17T04:47:32.227 に答える