Einfach Weg, um zu konvertieren exec sp_executesql zu einer normalen Abfrage?
Beim Umgang mit debugging-Abfragen mit Hilfe von Profiler und SSMS, seine ziemlich Häufig für mich so kopieren Sie eine Abfrage aus Profiler und testen Sie in SSMS. Weil ich benutze parametrisierte sql, meine Fragen sind alle verschickt exec sp_executesql Abfragen.
exec sp_executesql
N'/*some query here*/',
N'@someParameter tinyint',
@ someParameter =2
Werde ich diese nehmen und wandeln es in eine normale Abfrage für einfache Bearbeitung (intellisense, Fehlerprüfung, Zeilennummern, etc):
DECLARE @someParameter tinyint
SET @someParameter = 2
/*some query here*/
Natürlich, je größer und komplexer die Abfrage ist, desto schwieriger, dies zu tun. Und wenn Sie hin und her, mehrmals, es kann sein, ein Schmerz in den Arsch und genießen Sie jede Menge Zeit.
Gibt es eine einfache (z.B. makro-Befehl) - Weg zu konvertieren muh executesql in etwas bequemer?
- +1 würde ich Liebe, wie gut
- +1 Abgeordnete auf lovin' dieses
- Sie sollten überlegen, Ihre schließliche Lösung als Antwort...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht bewusst ein vorhandenes Add-In, die das können. Aber man könnte einen erstellen 🙂
Ein paar regulären Ausdrücken und einigen string-Verkettung und nach, dass es zu verkaufen, Vinko und anderen Seelen auf der Suche für diese Funktionalität.
Wenn Sie das Gefühl wie Tauchen in diesem, hier einige Informationen zum erstellen eines SSMS addin:
http://sqlblogcasts.com/blogs/jonsayce/archive/2008/01/15/building-a-sql-server-management-studio-addin.aspx
Verbrachte ich ein wenig Zeit, so dass ein einfaches Skript, Tat dies für mich. Es ist ein WIP, aber ich habe eine (sehr hässliche) Webseite vor, und es ist jetzt hier gehostet, wenn du es versuchen willst:
http://execsqlformat.herokuapp.com/
Beispiel für die Eingabe:
Und die Ausgabe:
Die Formatierung der eigentlichen SQL-Anweisung habe ich einmal zupfte es aus der Eingabe erfolgt mit Hilfe der API in http://sqlformat.appspot.com
decimal(x,y)
. Es stellt eineDECLARE
nach dem Komma.War ich auf der Suche nach etwas ähnliches, damit ich diese in LinqPad, kopieren Sie einfach sp_executesql-Anweisung in die Zwischenablage und führen Sie den code in LinqPad. Gibt es die SQL-Anweisung.
Verbrachte ich ein wenig Zeit und erstellt eine kleine änderung von Matt Roberts /Wangzq Lösungen ohne Abschnitt Erklärt, können Sie versuchen, es auf .NETTO-Fiddle oder download LINQPad 5-Datei.
Eingang:
Ausgabe:
Code:
Andere Lösung ersetzt die Werte der parameter direkt in der Abfrage
(nicht genau das, was Sie gefragt, aber es könnte als nützlich erweisen, andere):
https://code.msdn.microsoft.com/windowsdesktop/spExecuteSql-parser-1a9cd7bc
Ich geht aus:
zu:
was es leichter macht, zu verstehen.
Die Konsole-Anwendung, die auf dieser Seite verwendet werden kann, indem eine Datei-parameter oder kopieren der
sp_executesql
in die Zwischenablage, der die app ausführt, und dann fügen Sie die folgende SQL-Anweisung aus der Zwischenablage.Update:
Einer SQL-formatter kann auch Hinzugefügt werden, dass die Lösung für die Lesbarkeit:
http://www.nuget.org/packages/PoorMansTSQLFormatter/
Sql-Prompt bekam Sie dieses feature vor kurzem (2017-02-06). Wählen Sie den text und suchen Sie für "Inline-EXEC" im Kontextmenü. Gotta love Prompt 🙂
Stand ich mit diesem problem auch und schrieb einfache Anwendung für die Lösung von it - ClipboardSqlFormatter. Dies ist ein tray-Anwendung, die überwacht Zwischenablage input-Veranstaltungen und versucht zu erkennen und konvertieren von dynamic sql static sql.
Alles, was Sie brauchen, ist das kopieren von dynamischem sql (ab sql profiler zum Beispiel), und fügen Sie text-editor - einfügen von sql wird eine statische sql 🙂
Zum Beispiel, wenn kopiert sql ist:
exec sp_executesql N' SELECT "obj"."CreateDateTime", "obj"."LastEditDateTime" FROM LDERC
"doc" INNER JOIN LDObject "obj" ON ("doc"."ID" = "obj"."ID") LEFT OUTER JOIN LDJournal
"ContainerID.jrn" ON ("doc"."JournalID" = "ContainerID.jrn"."ID") WHERE ( "doc"."ID"
= @V0 AND ( "doc"."StateID" <> 5 AND "ContainerID.jrn"."Name" <> ''Hidden journal''
) ) ',N'@V0 bigint',@V0=6815463'
dann sql eingefügt werden:
SELECT "obj"."CreateDateTime"
,"obj"."LastEditDateTime"
FROM LDERC "doc"
INNER JOIN LDObject "obj" ON ("doc"."ID" = "obj"."ID")
LEFT OUTER JOIN LDJournal "ContainerID.jrn" ON ("doc"."JournalID" = "ContainerID.jrn"."ID")
WHERE (
"doc"."ID" = 6815463
AND (
"doc"."StateID" <> 5
AND "ContainerID.jrn"."Name" <> 'Hidden journal'
)
)
Können Sie das Azur-data-studio-Erweiterung. es basiert auf dem @Matt Roberts repo.
https://github.com/PejmanNik/sqlops-spexecutesql-to-sql/releases/tag/0.0.1
Fazit: I Hinweis: dieser bekommt noch eine kleine Aufmerksamkeit, so dass ich ' ll fügen Sie details, was hier für meine letztendliche Lösung war.
Es stellt sich heraus, dass es keine beats, es zu tun für sich selbst. Habe ich eine einfache Konsolen-app, die analysiert meine gespeicherten Prozedur und spuckte das, was ich wollte. Durch hinzufügen zu der Liste der externen Werkzeuge, und übergeben den aktuellen Dateinamen als argument, könnte ich die folgenden zu entfernen und neu zu ordnen, was ich brauchte.
Im Einsatz, ich würde hinzufügen einer neuen sql-Datei, fügen Sie in der sql, speichern Sie, und führen Sie dann das externe tool. Nachdem es abgeschlossen ist, die IDE fragt mich die Datei neu geladen. Puh, keine gespeicherte Prozedur.
Ich tun, beachten Sie, dass dies funktioniert möglicherweise nicht mit jeder executesql-Anweisung, so werden Sie zu ändern, wenn es Ihren Anforderungen nicht entspricht.