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
相关产品推荐
相关产品推荐

