2008-09-04 3 views
15

Nicht in der Lage, ein SQL-Diff-Tool zu finden, das meine Bedürfnisse erfüllt, schreibe ich mein eigenes. Zwischen den Tabellen INFORMATION_SCHEMA und sys habe ich eine weitgehend vollständige Arbeitsversion. Aber eine Sache, die ich nicht in den Metadaten finden kann, ist die Definition eines Triggers, wissen Sie, der tatsächliche SQL-Code. Übersehe ich etwas?Wie kann ich die Definition (Text) eines Triggers in SQL Server erhalten?

Danke.


Danke, Pete, ich wusste nicht, dass!

Scott, ich arbeite mit sehr grundlegenden Hosting-Pakete, die Remote-Verbindungen mit der DB nicht zulassen. Aus den Spezifikationen von RedGate (die ich mir sowieso nicht leisten kann) weiß ich nicht, ob sie dafür Abhilfe schaffen, und obwohl es auch APIs gibt (wie die von Apex), habe ich das nicht gesehen Investition in eine Lösung, die noch mehr Programmierung von mir erfordert. :)

Meine Lösung besteht darin, eine ASPX-Seite auf der Site zu löschen, die als eine Art "Schema-Dienst" fungiert und die gesammelten Metadaten als XML zurückgibt. Ich habe eine kleine AJAX-App eingerichtet, die eine beliebige Anzahl von Kataloginstanzen mit einem Master vergleicht und die Diffs anzeigt. Es ist nicht perfekt, aber ein großer Schritt nach vorne für mich.

Danke nochmal!

+0

auf zu erweitern, was Pete schrieb, 'sp_helptext' sehr nützlich ist, um die SQL hinter jedem Trigger, Ansichten, gespeicherten Prozeduren für aufschlussreich, Funktion usw. –

Antwort

15

sp_helptext funktioniert, um die SQL zu erhalten, die einen Trigger ausmacht.

Die Textspalte in der syccomments-Sicht enthält auch die SQL, die für die Objekterstellung verwendet wird.

14

Für 2005 und 2008 Sie die OBJECT_DEFINITION() Funktion

+2

..work für 2005-2012 - https: // msdn .microsoft.com/de-de/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

auf SQLMenace Antwort erweitern verwenden können, ist hier eine einfache Abfrage alle Trigger und ihre Definitionen aus einer Datenbank zurück:

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

dieses Abfrage-Rückgabe-Trigger mit seinem Namen und seinem Körper.

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'