在批处理文件中使用sqlcmd

时间:2013-06-09 10:45:35

标签: batch-file parameters sqlcmd

我已经搜索了StackOverflow几个小时,并尝试了类似问题的不同建议,但到目前为止没有任何正确传递参数(双引号,^)。

这是它的简短版本:

@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P p@ssword -i C:\query.sql -s"," | findstr /V /C:"-" /B >c:\output.csv

基本上,我想传递一个包含分隔符的相当长的参数。但我发现这种情况的唯一方法就是使用参数。我想尽量保持简单。这是唯一的办法吗?你能举例说明这可能有用吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我不确定这是否重要,但我认为-s","之间应该有空格

但更重要的是,你的管道结构是错误的。您的sqlcmd命令在新窗口中运行,但您的管道正在原始窗口中查找START命令本身的输出 - 并且没有任何输出。

您可以通过转义管道和重定向来使命令工作。

@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
start /w "sqlcmd" sqlcmd.exe -S DBserverName -U username -P p@ssword -i "C:\query.sql" -s "," ^| findstr /V /C:"-" /B ^>"c:\output.csv"

但根本不需要使用START。您的脚本可以直接执行sqlcmd,一切都更简单。

@echo off
cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\
sqlcmd.exe -S DBserverName -U username -P p@ssword -i "C:\query.sql" -s "," | findstr /V /C:"-" /B >"c:\output.csv"

您可能还遇到密码问题,具体取决于使用的字符。您可能必须引用和/或转义密码,sqlcmd.exe可能有自己的转义规则。如果是,那么您可能不得不担心转义为cmd.exe和sqlcmd.exe。

答案 1 :(得分:0)

这一行应该在整个路径上有双引号,在某些情况下很重要。

cd C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\

并且start命令在开头需要双引号,因为它将第一个集合作为窗口标题。

start "" /w ....