2010-07-06 5 views
0

Je suis confronté à un problème maintenant. J'utilise ruby ​​et SQLCMD pour générer des scripts TSQL. Maintenant, je veux vérifier la syntaxe du script généré. J'utilise l'instruction SQL suivante:En TSQL, la commande SET doit-elle être dans son propre lot?

SET PARSEONLY ON; 
SELECT 888 
SET PARSEONLY OFF; 

-je tester dans SSMS, lorsque vous sélectionnez ces trois déclarations comme un lot, un serveur sql me donnera le résultat, ce qui est 888. Je ne veux pas que le résultat réel , Je veux juste tester si la syntaxe de mon script est bonne. J'ai donc essayé l'instruction SQL suivante:

SET PARSEONLY ON; 
GO 
SELECT 888 
GO 
SET PARSEONLY OFF; 
GO 

Maintenant, si je sélectionne toutes ces déclarations comme un lot, SQL Server va juste me dire Commande (s) terminé avec succès. Donc, ce que je veux savoir, c'est si la commande SET devrait dans son propre lot?

Répondre

3

Yousui, Non ce que vous faites est presque juste; Lisez here pour plus d'informations. Juste une chose: vous ne pouvez pas utiliser SET PARSEONLY ON et SET PARSEONLY OFF dans la même instruction car la requête serait exécutée et non analysée. Donc, essayez ceci:

SET PARSEONLY ON 
*-- YOUR QUERY* 
GO 
SET PARSEONLY OFF 

Rappelez-vous simplement que parseonly vérifie uniquement la syntaxe, pas les objets, comme les tables, etc. Si vous voulez faire la validation des objets et des contrôles utilisez NOEXEC;

SET NOEXEC ON GO 
*-- YOUR QUERY HERE* 
SET NOEXEC OFF 
Questions connexes