Wie kann ich programmgesteuert überprüfen (analysieren) die Gültigkeit einer TSQL-Anweisung?
Ich versuche, mich um meine integration tests mehr idempotent. Eine Idee war zum ausführen rollback nach jedem test, die andere Idee war, etwas wie ein Programm analysiert den text, ähnlich wie das grüne Kontrollkästchen im Query Analyzer oder SSMS.
Wie bekomme ich SQL Server zu analysieren ist mein Befehl, ohne läuft es mit ADO.NET?
UPDATE:
Dies ist, was schließlich funktionierte wie gewünscht:
using (DbCommand executeOnly = Factory.DbCommand())
{
executeOnly.Connection = command.Connection;
executeOnly.CommandType = CommandType.Text;
executeOnly.CommandText = "SET NOEXEC ON;" + sqlCommand;
executeOnly.Connection.Open();
executeOnly.ExecuteNonQuery();
}
//set more properties of command.
command.Execute();
Aus unerklärlichen Gründen, "SET PARSEONLY ON
" funktioniert nur im Query Analyzer. Ich konnte nicht diese Einstellung auf ein ADO.NET -Verbindung. Es ist nur gut, weil PARSEONLY
scheint zu fangen, nur syntax-Fehler, das ist nicht ein häufiger Fehler. SET NOEXEC ON
fangen einen breiteren Sorten von Fehlern, wie eine Ansicht, die auf eine fehlende Tabelle oder Spalte oder ein fehlender parameter in einer gespeicherten Prozedur.
InformationsquelleAutor der Frage MatthewMartin | 2010-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke ich, dass der Befehl, den du suchst, ist
SET NOEXEC ON
. Wenn Sie diese für Ihre Verbindung, die Anfragen werden geparst, aber nicht ausgeführt werden. Eine andere Möglichkeit wäreSET PARSEONLY ON
aber ich bin ehrlich gesagt nicht sicher, was der Unterschied zwischen den beiden wirklich ist.InformationsquelleAutor der Antwort Eric Petroelje
+1 zu Eric ' s Antwort. Aber ich habe festgestellt
SET FMTONLY ON
auch nützlich sein, alsSET NOEXEC ON
scheint nicht zu werfen, bis alle Fehler.z.B.
Ausgeführt, dass mit
SET NOEXEC ON
sagt, es war erfolgreich, trotz der Tabelle nicht vorhandenen in der Datenbank. Es läuft mitSET FMTONLY ON
stattdessen werfen die "Ungültige Objekt-name" Fehler.SET FMTONLY AUF gibt auch Metadaten zu dem resultset zurückgegeben werden, die können sehr nützlich sein
InformationsquelleAutor der Antwort AdaTheDev
SQL Server 2012 analysieren können, Ihre syntax, die Verfahren und die Tabellen mit dem folgenden Systemprozeduren und Funktionen:
Sie sind angeblich ersetzen Sie "SET FMTONLY".
Habe ich getestet und Sie arbeiten viel besser als "SET NOEXEC ON" und "SET PARSEONLY AUF"
Beispiele:
Wird nicht werfen eine Fehlermeldung:
Richtig wirft einen Fehler ("SET NOEXEC" und "SET PARSEONLY" werfen Sie nicht einen Fehler in diesem Fall):
InformationsquelleAutor der Antwort Jarle Bjørnbeth
Verwenden Sie die folgende Abfrage
InformationsquelleAutor der Antwort Ralf de Kleine
SET PARSEONLY : Untersucht die syntax der einzelnen Transact-SQL-Anweisung und gibt Fehlermeldungen ohne Kompilierung oder Ausführung der Anweisung.
InformationsquelleAutor der Antwort Pranay Rana
Wirklich, es hängt vom Zweck des tests.
Sicherste Weg wäre, um die rollback nach jedem test, wenn Ihre Aussagen eignen sich, die (nicht zu schweren Gewicht zu machen, lebensfähig).
Ich habe dies in der Vergangenheit getan und sich gefreut haben um benachrichtigt zu werden, der der Laufzeit-Probleme, ich würde nicht gefangen haben, keine andere Möglichkeit.
InformationsquelleAutor der Antwort Martin Smith
VSTSDBPro hat ein query-parser können Sie programmgesteuert Zugriff: http://blogs.msdn.com/b/gertd/archive/2008/08/21/getting-to-the-crown-jewels.aspx
InformationsquelleAutor der Antwort Robert L Davis