2009-11-03 7 views
2

Pour découvrir tous les déclencheurs dans une base de données MS SQL Server donnée, j'interroge actuellement la table sysobjects (ce qui est correct car cela fonctionne dans MS SQL Server 2000 que je dois prendre en charge), par exemple.Comment découvrir le schéma parent du déclencheur?

SELECT R1.name AS trigger_name, 
     T1.name AS trigger_parent_table_name 
    FROM sysobjects AS R1 
     INNER join sysobjects AS T1 
      ON R1.parent_obj = T1.id 
WHERE R1.xtype = 'tr'; 

Cela me donne une liste réduite de noms de déclenchement et pour chaque que je peux utiliser

EXEC sp_helptext 'trigger_name_here' 

pour trouver la définition. Cela fonctionne bien pour les bases de données où seul le schéma dbo par défaut est utilisé.

J'ai maintenant une base de données MS SQL Server 2005 qui utilise plusieurs schémas. Quelle est la meilleure façon de découvrir le schéma pour chaque déclencheur?

Répondre

6

Vous recherchez l'objet parent pour un trigger, ce sera toujours une table. Dans sys.tables (vue système) vous obtenez le schema_id et avec lui vous pouvez aller sys.schemas (vue système aussi) pour obtenir le nom du schéma.

Espérons que cela aide.

-

EDIT:

Le code:

SELECT  sys.objects.name AS [trigger], 
      sys.tables.name AS [table], 
      sys.objects.type, 
      sys.schemas.name AS [schema] 
FROM  sys.schemas RIGHT OUTER JOIN 
      sys.tables ON sys.schemas.schema_id = sys.tables.schema_id RIGHT OUTER JOIN 
      sys.objects ON sys.tables.object_id = sys.objects.parent_object_id 
WHERE  sys.objects.type = 'tr' 

C'est est avec sys.tables mais vous pouvez le faire avec seulement sys.objects, ceci est une sélection générale chercher les parents et les schémas:

SELECT  O.name, O.type, S.name AS [schema], 
      OP.name AS parent_name, OP.type AS parent_type, SP.name AS parent_schema 
FROM  sys.schemas AS SP RIGHT OUTER JOIN 
      sys.objects AS OP ON SP.schema_id = OP.schema_id RIGHT OUTER JOIN 
      sys.objects AS O LEFT OUTER JOIN 
      sys.schemas AS S ON O.schema_id = S.schema_id ON OP.object_id = O.parent_object_id 
Questions connexes