【问题标题】:SQLCMD not printing result messages after first result returned 0 rowsSQLCMD 在第一个结果返回 0 行后不打印结果消息
【发布时间】:2019-04-08 08:11:38
【问题描述】:

我正在使用 sqlcmd 在我的 sql-server 数据库中运行一些插入和更新语句。当第一个语句返回 0 行时,屏幕上的输出仅显示 0 行受影响,并且即使它们在 DB 中成功,也不会显示连续消息的输出。

当第一个语句影响一个或多个行时,会显示所有消息。即使 0 行受影响的语句发生在脚本的稍后阶段。还尝试在每个语句的末尾使用分号。尝试使用 SET NOCOUNT ON。都是一样的效果。 sqlcmd 的命令行参数似乎也不起作用

找到这篇文章:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d6c5e90c-0c74-4ab4-b883-7a5ac93c6220/messages-from-sqlcmd?forum=transactsql 看起来这不是他们修复的东西。我在 Linux 的 17.3.0000.1 版本上运行。还尝试了旧版本,但没有运气。

sqlcmd -S myserver,INST01 -i test.sql -d MyDB

这里是我的sql脚本的内容:

UPDATE [MissionsDB].[dbo].[People_test] SET Name = 'TEST' WHERE 1=0;
INSERT INTO [dbo].[People_test] (Name) VALUES ('Peter2')
INSERT INTO [dbo].[People_test] (Name) VALUES ('Peter3')
UPDATE [dbo].[People_test] SET Name = 'Peter5' WHERE Name in ('Peter3','Peter1')

这是输出:

(0 rows affected)

之后什么都没有显示。

当我将要执行的第一个插入语句不在第一个位置时,sqlcmd 会将所有结果消息打印到屏幕上。

对此有何建议?

【问题讨论】:

  • 您的脚本 INSERT INTO [dbo].[People_test] (Name) VALUES ('Peter1') WHERE 1=0; 不正确 您不能将 Where 与 insert ...价值观
  • 更新了sql,还是一样的效果。
  • 我尝试了相同的命令,但在 Windows 中,由于我没有 Linus 机器,它显示了受影响的行数。我建议你在 sql management studio 下运行,这样 exec master..cp_cmdshell 'your sqlcmd command'
  • 是否使用虚拟SELECT NULL 语句为您的第一个语句人为地生成结果是一种选择?如果输出搞砸了其他任何东西,另一种选择是 SELECT NULL a INTO #t 有一个“影响行”的语句。
  • 杰罗恩的好主意。现在按预期工作。但是这样我总是会在第一行中影响第一行。不是理想的解决方案。也许毕竟是 MS 支持的问题?

标签: sql-server sqlcmd


【解决方案1】:

我刚刚遇到了同样的问题。事实证明这是由于使用了旧版本的 sqlcmd。要查看您正在运行的版本,请使用:

sqlcmd -?

我不确定哪个版本解决了这个问题,但版本 10.50.2500.0 有你描述的问题,而版本 15.0.1300.359 没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2014-04-17
    • 2016-05-23
    相关资源
    最近更新 更多