Ausgabe
Ich versuche, meine Integrationstests idempotenter zu machen. Eine Idee war, nach jedem Test ein Rollback auszuführen, die andere Idee war, den Text programmatisch zu parsen, ähnlich dem grünen Kontrollkästchen in Query Analyzer oder SSMS.
Wie bringe ich SQL Server dazu, meinen Befehl zu analysieren, ohne ihn mit ADO.NET auszuführen?
UPDATE:
Das hat endlich wie gewünscht funktioniert:
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
funktionierte ” ” nur im Query Analyzer. Ich konnte dies nicht für eine ADO.NET-Verbindung festlegen. Es ist genauso gut, weil PARSEONLY
es anscheinend nur Syntaxfehler abfängt, was kein häufiger Fehler ist. SET NOEXEC ON
wird eine breitere Vielfalt von Fehlern abfangen, z. B. eine Ansicht, die auf eine fehlende Tabelle oder Spalte oder einen fehlenden Parameter in einer gespeicherten Prozedur verweist.
Lösung
Ich denke, der gesuchte Befehl ist SET NOEXEC ON
. Wenn Sie dies für Ihre Verbindung festlegen, werden die Abfragen zwar analysiert, aber nicht ausgeführt. Eine andere Option wäre SET PARSEONLY ON
, aber ich bin mir ehrlich gesagt nicht sicher, was der Unterschied zwischen den beiden wirklich ist.
Beantwortet von – Eric Petroelje
Antwort geprüft von – Dawn Plyler (FixError Volunteer)