c# fonctionnalité - Comment puis-je vérifier (analyser) par programme la validité d'une instruction TSQL?




4 Answers

Je pense que la commande que vous recherchez est SET NOEXEC ON . Si vous définissez ceci pour votre connexion, les requêtes seront analysées mais ne seront pas exécutées. Une autre option serait SET PARSEONLY ON , mais honnêtement, je ne suis pas sûr de la différence entre les deux.

n'est présente

J'essaie de rendre mes tests d'intégration plus idempotents. Une idée était d'exécuter la restauration après chaque test, l'autre idée était d'analyser le texte par programmation, de la même manière que la case à cocher verte dans Query Analyzer ou SSMS.

Comment obtenir SQL Server pour analyser ma commande sans l'exécuter en utilisant ADO.NET?

MISE À JOUR: C'est ce qui a finalement fonctionné comme souhaité:

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();

Pour des raisons inexplicables, " SET PARSEONLY ON " n'a fonctionné que dans Query Analyzer. Je ne pouvais pas définir cela sur une connexion ADO.NET. C'est tout aussi bien parce que PARSEONLY semble capturer que des erreurs de syntaxe, ce qui n'est pas une erreur courante. SET NOEXEC ON une plus grande variété d'erreurs, comme une vue qui fait référence à une table ou une colonne manquante ou un paramètre manquant dans une procédure stockée.




SQL Server 2012 peut analyser votre syntaxe, vos procédures et vos tables avec les procédures et fonctions système suivantes:

Ils sont censés remplacer "SET FMTONLY".

Je les ai testés et ils fonctionnent beaucoup mieux que "SET NOEXEC ON" et "SET PARSEONLY ON"

Exemples:

Ne jettera pas une erreur:

sp_describe_undeclared_parameters
    @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes;'

Lâchera correctement une erreur ("SET NOEXEC" et "SET PARSEONLY" ne jettent pas une erreur dans ce cas):

sp_describe_undeclared_parameters 
  @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes;SELECT object_id, name, type_desc FROM sys.NOTaTABLE;'



SET PARSEONLY : Examine la syntaxe de chaque instruction Transact-SQL et renvoie les messages d'erreur sans compiler ou exécuter l'instruction.







Related