Wie kann ich die Definition (Hauptteil) eines Triggers in SQL Server abrufen?
-
09-06-2019 - |
Frage
Da ich kein SQL-Diff-Tool finden kann, das meinen Anforderungen entspricht, schreibe ich mein eigenes.Zwischen den Tabellen INFORMATION_SCHEMA und sys habe ich eine weitgehend vollständige Arbeitsversion.Aber eine Sache, die ich in den Metadaten nicht finden kann, ist die Definition eines Triggers, Sie wissen schon, der eigentliche SQL-Code.Übersehe ich etwas?
Danke.
Danke, Pete, das wusste ich nicht!
Scott, ich arbeite mit sehr einfachen Hosting-Paketen, die keine Remote-Verbindungen zur Datenbank zulassen.Ich weiß aus den Spezifikationen von RedGate (die ich mir sowieso nicht leisten kann) nicht, ob sie einen Workaround dafür bieten, und obwohl es auch APIs gibt (wie die von Apex), habe ich das nicht gesehen Es war für mich sinnvoll, in eine Lösung zu investieren, die für mich immer noch mehr Programmierung erfordern würde.:) :)
Meine Lösung besteht darin, eine ASPX-Seite auf der Site abzulegen, die als eine Art „Schema-Dienst“ fungiert und die gesammelten Metadaten als XML zurückgibt.Ich habe eine kleine AJAX-App eingerichtet, die beliebig viele Kataloginstanzen mit einem Master vergleicht und die Unterschiede anzeigt.Es ist nicht perfekt, aber für mich ein großer Fortschritt.
Danke noch einmal!
Lösung
sp_helptext dient dazu, die SQL abzurufen, aus der ein Trigger besteht.
Die Textspalte in der Systemkommentaransicht enthält auch das SQL, das für die Objekterstellung verwendet wird.
Andere Tipps
Für 2005 und 2008 können Sie das verwenden OBJECT_DEFINITION() Funktion
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>'
Um die Antwort von SQLMenace zu erweitern, finden Sie hier eine einfache Abfrage, um alle Trigger und ihre Definitionen aus einer Datenbank zurückzugeben:
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'
Diese Abfrage gibt einen Auslöser mit seinem Namen und Text zurück.
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'