Список всех триггеров в базе данных - PullRequest
0 голосов
/ 14 июня 2010

Можно ли перечислить все триггеры во всех таблицах базы данных?Я могу перечислить все хранимые процедуры пользователя с помощью:

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 ]

3 голосов
/ 16 апреля 2015

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

Объект DatabaseDdlTrigger представляет триггер языка определения данных (DDL), который создается в базе данных SQL Server.Однако, исходя из вашего описания, я думаю, что вы хотите перебрать триггеры языка манипулирования данными (DML), которые создаются в таблицах SQL Server.

Пожалуйста, обратитесь к следующему примеру:

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
0 голосов
/ 17 июля 2010

Каждый объект базы данных имеет свойство Triggers, которое вы можете перебрать, чтобы найти все триггеры.
Получив ссылку на этот триггер, проверьте свойство IsSystemObject, чтобы проверить, является ли он определяемым пользователем триггером.

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

Веселись.

...