2010-06-14 4 views
0

Est-il possible de lister tous les déclencheurs dans toutes les tables d'une base de données? Je peux énumérer toutes les procédures stockées utilisateur avec:Liste tous les déclencheurs dans une base de données

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 

Mais rien d'évident dans SMO pour les déclencheurs. (Je suis en train d'essayer de lister uniquement les déclencheurs personnalisés, qui ne sont pas nommés DEL_tablename, INS_tablename, UPD_tablename) dans la base de données sélectionnée.

+0

Pour quelle base de données, y compris la version? –

+0

2000,2005 et 2008 via SMO – madlan

+0

N'est-ce pas possible? – madlan

Répondre

0

Chaque objet de base de données possède une propriété Triggers, que vous pouvez parcourir pour rechercher tous les déclencheurs.
Une fois que vous avez fait référence à ce déclencheur, vérifiez la propriété IsSystemObject pour vérifier s'il s'agit d'un déclencheur défini par l'utilisateur ou non.

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

Amusez-vous.

+0

Hi blorkfish, cela ne semble pas répertorier les déclencheurs, même sans le si? (il frappe la boucle puis se ferme donc je suppose qu'il ne trouve aucun déclencheur sur la base de données sélectionnée.) – madlan

+0

Hey Madlan, L'objet Microsoft.SqlServer.Management.Smo.Table et l'objet vue ont aussi une propriété Triggers. table qui a un déclencheur, peut-être essayer d'énumérer cette propriété? – blorkfish

+0

Je vois, ce sont des déclencheurs de table donc pourrait-il expliquer? – madlan

3

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

Un objet DatabaseDdlTrigger représente un déclencheur de langage de définition de données (DDL), qui est créé sur une base de données SQL Server. Toutefois, à partir de votre description, je pense que vous souhaitez parcourir les déclencheurs DML (Data Manipulation Language), qui sont créés sur les tables SQL Server.

S'il vous plaît se référer à l'exemple suivant:

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 
Questions connexes