2008-09-04 7 views
15

Impossible de trouver un outil de comparaison SQL qui réponde à mes besoins, j'écris le mien. Entre les tables INFORMATION_SCHEMA et sys, j'ai une version de travail presque complète. Mais une chose que je ne peux pas trouver dans les métadonnées est la définition d'un déclencheur, vous le savez, le code SQL réel. Est-ce que je regarde quelque chose?Comment puis-je obtenir la définition (corps) d'un déclencheur dans SQL Server?

Merci.


Merci, Pete, je ne savais pas à ce sujet! Scott, je travaille avec des paquets d'hébergement très basiques qui ne permettent pas les connexions à distance à la DB. Je ne sais pas à partir des spécifications sur RedGate (que je ne peux pas se permettre de toute façon) si elles fournissent une solution de contournement pour cela, et bien qu'il y ait aussi des API (comme celle d'Apex), je n'ai pas vu point d'investir dans une solution qui allait encore nécessiter plus de programmation de ma part. :)

Ma solution consiste à déposer une page ASPX sur le site qui agit comme une sorte de "service de schéma", renvoyant les métadonnées collectées au format XML. J'ai mis en place une petite application AJAX qui compare n'importe quel nombre d'instances de catalogue à un maître et montre les diffs. Ce n'est pas parfait, mais un grand pas en avant pour moi.

Merci encore! Sp_helptext fonctionne pour obtenir le SQL qui constitue un déclencheur.

+0

Pour développer ce que Pete a écrit, 'sp_helptext' est très utile pour révéler le SQL derrière tout déclencheur, vue, procédure stockée, fonction, etc. –

Répondre

15

La colonne de texte de la vue syscomments contient également le sql utilisé pour la création d'objet.

14

Pour 2005 et 2008, vous pouvez utiliser la fonction OBJECT_DEFINITION()

+2

..work pour 2005 - 2012 - https: // msdn .microsoft.com/fr-fr/library/ms176090% 28v = sql.110% 29.aspx – Milan

10
SELECT  
    DB_NAME() AS DataBaseName,     
    dbo.SysObjects.Name AS TriggerName, 
    dbo.sysComments.Text AS SqlContent 
FROM 
    dbo.SysObjects INNER JOIN 
     dbo.sysComments ON 
     dbo.SysObjects.ID = dbo.sysComments.ID 
WHERE 
    (dbo.SysObjects.xType = 'TR') 
    AND 
    dbo.SysObjects.Name = '<YourTriggerName>' 
1

Pour développer la réponse de SQLMenace, voici une simple requête pour renvoyer tous les déclencheurs et leurs définitions à partir d'une base de données:

SELECT 
    sysobjects.name AS trigger_name, 
    OBJECT_NAME(parent_obj) AS table_name, 
    OBJECT_DEFINITION(id) AS trigger_definition 
FROM sysobjects 
WHERE sysobjects.type = 'TR' 
0

cette déclencheur de retour de requête avec son nom et son corps.

Select 
    [tgr].[name] as [trigger name], 
    [tbl].[name] as [table name] , 
    OBJECT_DEFINITION(tgr.id) body 

    from sysobjects tgr 

    join sysobjects tbl 
    on tgr.parent_obj = tbl.id 

WHERE tgr.xtype = 'TR' 
Questions connexes