这个简单的命令在bash中失败:
echo "print 'tsql'" | sqlcmd -E
它在正常的旧命令提示符下正常工作。
它曾经与以前的cygwin版本一起工作。 我也尝试在其中插入各种口味的unix2dos,并且用“od -c”查看了输出。 所以我很确定,这不仅仅是一个LF与CR / LF问题。
看这个线程: http : //cygwin.com/ml/cygwin/2010-01/msg00205.html
导致我相信cygwin中有些东西被破坏了,但是我一直无法追查更多的线索。
有没有人有任何线索,除了生成一个临时文件,然后使用
sqlcmd -E -i tempfile
这工作,但它是丑陋的。
我正在使用MSYS2(x86-64,与20150916一起安装,并使用pacman更新到两天前的最新的默认包),但我最终遇到了相同的错误(这是有道理的,因为MSYS2是一个cygwin的衍生物)。 我从来没有这样的MSYS,但由于MSYS是死了,我想要更现代的工具,我切换到MSYS2和移植我的脚本。 我发现了一个解决方法,目前正在为我工作:
$ echo hi | cmd //c "cat | sqlcmd"
我认为它的工作原理是因为我们要求cmd设置MSYS2进程( cat )和Windows进程之间的pipe道,而不是让MSYS2 / bash来做。 尽pipe我也怀疑SQLCMD在90年代从Windows编程中做了一些邪恶的诡计,但它不应该首先做,这是一个特殊情况,可能值得在cygwin / MSYS2中开发一个解决方法。
请注意,使用此方法将parameter passing给sqlcmd变得非常困难,特别是如果您要传递一个文字" 。
从我的全部输出显示错误,其解决scheme,并显示我的sqlcmd来自哪里:
ohnob@WIN-F5A6PNAUAJ2 ~ $ echo hi |sqlcmd -S localhost\\SQLEXPRESS12 Sqlcmd: Error: Internal error at ReadTextLine (Reason: Unspecified error). ohnob@WIN-F5A6PNAUAJ2 ~ $ echo hi | cmd //c "cat | sqlcmd -S localhost\\SQLEXPRESS12" Msg 2812, Level 16, State 62, Server WIN-F5A6PNAUAJ2\SQLEXPRESS12, Line 1 Could not find stored procedure 'hi'. ohnob@WIN-F5A6PNAUAJ2 ~ $ which sqlcmd /c/Program Files/Microsoft SQL Server/Client SDK/ODBC/110/Tools/Binn/sqlcmd ohnob@WIN-F5A6PNAUAJ2 ~ $ WHERE cat | head -n 1 C:\msys64\usr\bin\cat.exe
我在Bash使用SQLCMD遇到了类似的问题,截至目前,在Google上searchsqlcmd cygwin时,这个问题排名第三。 我也认为这是由于错误导致的结局,
Sqlcmd: Error: Internal error at ReadTextLine (Reason: Unspecified error).
我尝试了诸如stream程replace之类的各种诡计,但是这并没有奏效。 我能想到的最好的就是使用
sqlcmd -Q "print 'tsql'"