You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017中SQLCMD的!!命令无法正常工作求助

解决SQLCMD中:!! time /T无输出的问题

嘿,我来帮你搞定这个问题!你遇到的情况其实是SQLCMD对操作系统命令(通过:!!调用)和T-SQL语句的输出处理逻辑不一样导致的——默认情况下它们的输出流是分开的,所以你看不到time /T的结果,甚至可能让你误以为整个脚本都没输出。

下面给你两种快速解决的方案:

方法1:启动SQLCMD时添加-r 1参数

:!!执行的系统命令默认会把输出发送到标准错误流,而PRINT的内容则在标准输出流。加上-r 1参数可以把错误流重定向到输出流,这样两个内容就能一起显示了:

sqlcmd -S 你的服务器名 -d 目标数据库名 -U 用户名 -P 密码 -r 1

进入SQLCMD会话后执行你的命令:

:!! time /T
PRINT 'Hello world!'

这下就能同时看到时间和Hello world的输出了。

方法2:在SSMS的SQLCMD模式下调整设置

如果你是在SSMS里用SQLCMD模式跑脚本,需要确保SQLCMD的输出被正确捕获:

  • 打开SSMS,点击顶部菜单栏的 工具 > 选项
  • 导航到 查询执行 > SQL Server > SQLCMD
  • 勾选 "将SQLCMD输出发送到消息窗口" 选项,点击确定
  • 重新打开查询窗口,启用SQLCMD模式(点工具栏的"SQLCMD模式"按钮),再执行脚本——此时time /T的结果会出现在"消息"标签页里,和PRINT的内容在一起。

为什么注释第一行后PRINT能正常显示?

因为去掉:!! time /T后,只有PRINT命令在执行,它的输出默认会被SQLCMD(或SSMS)捕获并展示。而:!!调用的系统命令输出因为流的隔离问题,默认没有被展示出来,才造成了“完全没输出”的错觉。

试试上面的方法,应该就能解决你的问题啦!

内容的提问来源于stack exchange,提问作者Marc Vitalis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:41