Com problemas para piping entre cygwin e sqlcmd

1

Este comando simples falha no bash:

echo "print 'tsql'" | sqlcmd -E

funciona corretamente em um prompt de comando antigo comum.

Ele costumava trabalhar com versões anteriores do cygwin. Eu também tentei inserir vários sabores de unix2dos lá, e eu olhei para a saída com "od -c". Então, eu tenho certeza que não é apenas um problema LF vs. CR / LF.

Olhando para este tópico: link

leva-me a acreditar que algo foi quebrado no cygwin, mas não consegui encontrar mais pistas.

Alguém tem alguma pista, além de gerar um arquivo temporário e usar

sqlcmd -E -i tempfile

que funciona, mas é feio.

    
por Eric H. 09.05.2011 / 16:35

2 respostas

2

Estou usando o MSYS2 (x86-64, instalado com o 20150916 e atualizado usando pacman para os pacotes padrão mais recentes há dois dias), mas acabei encontrando o mesmo erro (o que faz sentido, já que o MSYS2 é um cygwin derivado). Eu nunca tive isso com o MSYS, mas como o MSYS está meio morto e eu queria ferramentas mais modernas, estou migrando para o MSYS2 e portando meus scripts. Eu encontrei uma solução que está funcionando para mim no momento:

$ echo hi | cmd //c "cat | sqlcmd"

Suponho que funcione porque pedimos que cmd configure o canal entre o processo MSYS2 ( cat ) e o processo do Windows, em vez de permitir que MSYS2 / bash o faça. Embora eu também suspeite que o SQLCMD esteja fazendo algum truque maldoso da programação do Windows nos anos 90 que ele não deveria estar fazendo em primeiro lugar, tornando-se um caso especial que talvez mereça uma solução alternativa no cygwin / MSYS2. / p>

Note que com este método, passar argumentos para sqlcmd torna-se realmente difícil, especialmente se você quiser passar um literal " .

Saída completa de mim, demonstrando o erro, sua solução e mostrando de onde meu sqlcmd está vindo:

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
    
por 09.11.2015 / 17:54
1

Eu tive problemas semelhantes trabalhando com o SQLCMD no Bash e, a partir de agora, essa questão está em terceiro lugar quando pesquisando por sqlcmd cygwin no Google. Eu também pensei que era devido a terminações de linha por causa do erro,

Sqlcmd: Error: Internal error at ReadTextLine (Reason: Unspecified error).

Eu tentei vários truques, como a substituição de processos, mas isso não funcionou. O melhor que eu pude fazer foi usar

sqlcmd -Q "print 'tsql'"
    
por 03.07.2014 / 21:03

Tags