[FIXED] Wie kann ich die Gültigkeit einer TSQL-Anweisung programmgesteuert überprüfen (parsen)?

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 ONfunktionierte ” ” nur im Query Analyzer. Ich konnte dies nicht für eine ADO.NET-Verbindung festlegen. Es ist genauso gut, weil PARSEONLYes anscheinend nur Syntaxfehler abfängt, was kein häufiger Fehler ist. SET NOEXEC ONwird 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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like