2009-06-05 7 views
1

Ich habe einen nächtlichen SQL Server-Auftrag, der auf SQL Agent geplant ist.Vom SQL Server-Job verwendete Objekte

Es verwendet eine Reihe von Datenbanken, gespeicherten Prozeduren und Tabellen.

Was ist das Beste, um eine Liste von diesen zu bekommen?

(Der SQL Server 2000)

Antwort

2

Sie können den Befehl Text jeden Schritt Ihrer Arbeit mit der folgenden Abfrage erhalten:

SELECT sj.name   AS job_name 
     ,sjs.step_id 
     ,sjs.step_name 
     ,sjs.command 
FROM msdb.dbo.sysjobs   AS sj 
JOIN msdb.dbo.sysjobsteps  AS sjs 
ON sj.job_id = sjs.job_id 
WHERE sj.name = '~your job name~' 
AND sjs.subsystem = 'TSQL' 
ORDER BY sj.name 
     ,sjs.step_id 

Sie können dann über den Befehl Text jeden Jobschritt suchen um nach Namen für Datenbanken, Tabellen und gespeicherte Prozeduren zu suchen. Dies ist einfacher, wenn Sie konsistente Benennungskonventionen für Ihre Objekte haben (z. B. Tabellennamen beginnen mit t_, Namen gespeicherter Prozeduren beginnen mit usp_). Denken Sie daran, Kommentare bei Ihrer Suche auszuschließen.

Eine Bibliothek für reguläre Ausdrücke erleichtert diese Aufgabe, aber die Unterstützung für sie ist in nativem T-SQL nicht enthalten. Es gibt more than one way, um SQL 2000 zu regular expression support hinzuzufügen, oder Sie können eine andere Sprache/ein anderes Tool verwenden, um die Suchvorgänge auszuführen.

Leider gibt es, abhängig von der Komplexität der T-SQL-Befehle, möglicherweise keine 100% garantierte Möglichkeit, Objektnamen zu identifizieren, ohne einen T-SQL-Parser zu schreiben (oder einzukaufen).

+1

Wenn Sie die SQL-Anweisungen aus der obigen Abfrage erhalten, empfehle ich, sie nicht direkt zu analysieren, sondern die Referenzen aus einem geschätzten Abfrageplan zu analysieren. Dies ist viel einfacher als das Parsen der SQL direkt selbst. Wenn Sie auf SQL 2005 waren, könnte ich Ihnen einige xquery Beispiele geben, oh gut :( – ahains

Verwandte Themen