【发布时间】: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