2017-03-01 2 views
-2

Ich baue eine Abfrage, die durch meine Ergebnisse von sp_helptext sucht, aber manchmal sp_helptext gibt diese:Warum gibt sp_helptext in SQL Server andere Ergebnisse zurück?

enter image description here

statt dessen:

enter image description here

Gibt es trotzdem meine bevorzugte Rückkehr zu bekommen Format von sp_helptext jedes Mal?

Und was verursacht Bild 1 passieren?

+2

Willkommen zu:

SELECT ISNULL(D.referenced_server_name,@@SERVERNAME) + '.' + ISNULL(D.referenced_database_name,DB_NAME()) + '.' + D.Referenced_Entity_Name AS [Referenced Tables] FROM sys.procedures P INNER JOIN sys.sql_expression_dependencies D ON P.object_id = D.referencing_id WHERE P.name = 'MySProc' ; 

Gibt eine verkettete Zeichenfolge Paketüberfluss. Bitte geben Sie Quelltext, Fehlermeldungen und andere Textinformationen immer als Inline-Text und nicht als externe Bilder an. Text ist durchsuchbar, wiederverwendbar und normalerweise einfacher zu lesen. Vergessen Sie auch nicht, Tags zu verwenden, um die Technologie zu identifizieren (diese Seite deckt alle Programmiersprachen ab). –

+1

Sie wollten Formatierung sagen? – TheGameiswar

+0

Ich stimme zu, die Frage ist nicht ganz klar. Verfügen Sie über Zeilenumbrüche im Unix-Stil? Wenn ja, fragen Sie sich, wie man Management Studio konfiguriert, wie man die Ausgabe nachbearbeitet oder 'sp_helptext' selbst ändert? –

Antwort

1

sp_helptext hat einige vorsätzliche Macken eingebaut, und einige "unerwartete" Verhaltensweisen.

Ich setze das in Anführungszeichen, weil die meisten Leute, die es verwenden, nicht wirklich die documentation gelesen haben, geschweige denn in die Systemprozeduren gegangen sind und die eigentliche Definition des Verfahrens selbst angeschaut haben.

Ich neige dazu, die Definitionen, anstatt in den Systemtabellen gespeichert zu verwenden:

SELECT definition 
FROM sys.all_sql_modules S 
WHERE OBJECT_NAME(S.object_id) = 'MySProc' 
; 

Dieses typisch mir konsistentere Ergebnisse in einigen Punkten gibt, und ermöglicht es mir auch sofort Änderungen wenn nötig zu tun. Mit sp_helptext speichern viele Leute die Ausgabe in einer Variablen und ändern dann den Variablenwert; Mit einem SELECT direkt von sys.all_sql_modules, können Sie einfach gewünschte Änderungen direkt auf den zurückgegebenen Wert ohne variable Operationen durchführen.

(Übrigens funktioniert die gleiche Abfrage hier auf sp_helptext selbst, und Sie können gerne ihre Definition betrachten, um zu versuchen, zu verstehen, was es macht und was mit Ihren Definitionen passiert. Stellen Sie nur sicher, dass Sie nicht versehentlich ALTER it ...)

Ich weiß, das beantwortet nicht genau Ihre Frage "Warum passiert das?", Und ich hoffe, dass die Antwort von jemand anderem Ihnen dabei helfen wird. In der Zwischenzeit können Sie versuchen, sich die Systemtabellen anzusehen und zu sehen, ob sie Ihnen vielleicht eine funktionierende Lösung bieten.

Viel Glück!

Erste Edit: Wenn Sie schauen, um Abhängigkeiten zu finden, auf Ihre Version von SQL abhängig Sie diese verwenden können:

[Referenced Tables] 
-------------------- 
ServerName\InstanceName.DBName.TableName 
+0

Danke! Sie sehen, ich versuche zu sehen, welche Procs auf DB1 von Tabellen auf DB2 abhängig sind. Mit sp_helptext Werke (wenn i String verwenden), aber nur, wenn die Ergebnisse wie Bild ist 2. Ich brauche eine ganze Liste der aktuellen Tabellennamen, die in DB2 abgefragt wird – Jacquespax

+0

So suchen Sie tatsächlich für Abhängigkeiten zwischen den Datenbanken? I.E. SProc1 in DB1 fragt Tabellen in DB2 ab? – 3BK

+0

Ja, die tatsächlichen Tabellennamen für jeden Prozess. Meine Abfrage funktioniert ... nur wenn sp_helptext schön spielt haha. (Wie Bild 2) – Jacquespax

Verwandte Themen