SQLCMD中如何让特定SQL文件覆盖-e回显选项?是否有SET ECHO OFF等效命令?
关于SQLCMD -e选项覆盖及等效SET ECHO OFF命令的问题
首先直接给结论:没办法通过SQL查询覆盖SQLCMD的-e选项,而且SQL Server本身也没有等效于SET ECHO OFF的内置命令。
具体原因和解决方案如下:
-e是SQLCMD启动时的命令行参数,属于工具级别的全局设置,一旦你用-e启动了SQLCMD,整个会话期间的输入回显行为就固定了,SQL脚本里的任何语句都没法修改这个设置。- SQL Server的T-SQL语法里并没有
SET ECHO相关的命令,这个命令常见于MySQL等其他数据库系统,SQL Server这边没有对应的替代项。
那要实现“执行SQL文件仅返回结果、不回显输入”的需求,你有两个可行的方向:
- 修改SQLCMD的启动命令:直接去掉
-e参数。比如原来的启动命令是:
改成:sqlcmd -S YourServer -d YourDB -i YourScript.sql -e
这样默认就不会回显输入内容,只会输出查询结果。sqlcmd -S YourServer -d YourDB -i YourScript.sql - 如果必须保留
-e参数:这种情况比较少见,但如果有特殊需求不得不带-e,可以考虑将输出重定向到文件后手动过滤回显内容,但这种方式比较繁琐且容易出错(因为回显内容和结果输出是混在一起的),所以更推荐第一种方案。
另外补充一点:SQLCMD支持一些脚本命令(比如:setvar、:exit等),但这些命令也无法改变-e参数带来的回显行为,毕竟-e是启动时就确定的工具属性。
内容的提问来源于stack exchange,提问作者mnemotronic
相关产品推荐
相关产品推荐

