SET NOCOUNT OFF ignoré dans SQLCMD

Je veux voir combien de lignes sont affectées pour chaque instruction DDL qui est exécutée par une requête, donc je mets SET NOCOUNT OFF au début de chaque requête qui est exécutée.

Exemple de requête:

SET NOCOUNT OFF; GO BEGIN TRY BEGIN TRANSACTION UPDATE dbo.tbProvClause SET ClauseTemplate = 'Clause1' where DocumentName = '\Templates\EndorsAccessPlainLanguageQCEng.CDS'; UPDATE dbo.tbProvClause SET ClauseTemplate = 'Clause 2' where DocumentName = '\Templates\EndorsEnforcedRemovallLtdMktPublicPropertyQCEng.CDS'; UPDATE dbo.tbProvClause SET ClauseTemplateFR = 'Malgré French Clause 1' where DocumentNameFR = '\Templates\EndorsAccessHOPPQcFr.CDS'; UPDATE dbo.tbProvClause SET ClauseTemplateFR = 'Malgré les exceptions Clause 2' where DocumentNameFR = '\Templates\EndorsEnlèvementFTNdomainepublicERLMPublicPropertyQcFr.CDS'; COMMIT TRAN PRINT 'Script Completed With Success - Changes committed on ' + CAST(current_timestamp AS varchar(25)) END TRY BEGIN CATCH -- END CATCH GO 

et ça revient

 (1 row(s) affected) (1 row(s) affected) (1 row(s) affected) (1 row(s) affected) Script Completed With Success - Changes committed on Nov 29 2017 12:10PM 

C'est bon. Mais quand je cours la même chose dans SQLCMD, je reçois seulement 1 rangée.

 sqlcmd -S testserver -dTestDB -i StackOverflowSQL.sql (1 rows affected) Script Completed With Success - Changes committed on Nov 29 2017 12:24PM 

Comment puis-je conserver la capacité de SET NOCOUNT OFF dans SQLCMD? La raison pour laquelle j'ai posé cette question est que j'ai un certain nombre de scripts que je veux utiliser en batch avec SQLCMD et je vais sauvegarder leurs logs. Dans ce cas, SET NOCOUNT OFF est très utile pour vérifier combien de lignes de 1 lignes affectées donneront un return sur le succès de l'exécution.

Essayez quelque chose comme ceci et voyez si cela fonctionne.

utilisez -v (petite lettre v).

 sqlcmd -v NOCOUNT=OFF -S testserver -dTestDB -i StackOverflowSQL.sql 

Ou

Dans la même invite de command, exécutez d'abord SET NOCOUNT=OFF avant d'appeler sqlcmd .

Regardez dans le lien de la documentation ci-dessous et searchz " Priorité variable ". Vous aurez une idée.

https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility

C'est juste une intuition. Supprimez l'instruction Go après "set nocount off".

Tout d'abord, l'instruction "set nocount off" ne nécessite pas de GO. Deuxièmement, je pense que GO (un exécuteur par lots) peut définir l'option uniquement pour ce lot.

Il y a une solution de contournement plutôt stupide si ma suggestion ne fonctionne pas. Vous pouvez: imprimer @@ rowcount après chaque instruction sql qui pourrait vous intéresser de surveiller le nombre de lignes.

Trouvé le problème. Plusieurs versions de SQLCMD étaient installées dans la machine. Pour savoir quelle version j'utilisais:

 E:\Test>where sqlcmd C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE 

Celui que j'utilisais était la version de SQL Server 2008 R2. J'ai regardé dans les variables d'environnement système PATH et changé l'ordre et maintenant il utilise la version 2012 du server SQL. Après avoir changé le PATH

 E:\Test>where sqlcmd C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE E:\Test>sqlcmd -S testserver -dTestdb -i StackOverflowSQL.sql (1 rows affected) (1 rows affected) (1 rows affected) (1 rows affected) Script Completed With Success - Changes committed on Nov 29 2017 3:37PM 

Ça marche!