在SQLCMD中忽略SET NOCOUNT OFF

时间:2017-11-29 17:36:19

标签: sql-server ssms sqlcmd

我想查看查询运行的每个DDL语句会影响多少行,因此我在每个运行的查询的开头设置了SET NOCOUNT OFF。

示例查询:

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

然后返回

(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

这很好。但是当我在SQLCMD中运行相同的时候,我只得到1行.i.e。

sqlcmd -S testserver -dTestDB -i StackOverflowSQL.sql

(1 rows affected)
Script Completed With Success - Changes committed on Nov 29 2017 12:24PM

如何在SQLCMD中保留SET NOCOUNT OFF的功能?我问这个问题的原因是我有许多脚本需要使用SQLCMD进行批处理,我将保存他们的日志。在这种情况下,SET NOCOUNT OFF对于检查受影响的 1行的行数将提供运行成功的反馈非常有用。

2 个答案:

答案 0 :(得分:0)

这只是一种预感。在"设置nocount off"。

之后删除Go语句

首先"设置nocount off"声明不要求GO。其次,我认为GO(批处理执行程序)可能只为该批次设置选项。

如果我的建议不起作用,有一个相当愚蠢的解决方法。 您可以: print @@ rowcount 在每个sql语句之后,您可能有兴趣监视行数。

答案 1 :(得分:0)

发现问题。机器中安装了多个版本的SQLCMD。要找出我正在使用的版本:

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

我使用的是SQL Server 2008 R2版本。我查看了系统环境变量PATH并更改了顺序,现在它使用SQL Server 2012版本。更改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

有效!