Как запустить файл сценария sql с использованием sqlcmd и вывести его в оболочку и файл - PullRequest
13 голосов
/ 06 февраля 2012

Я пытаюсь запустить скрипт sql из файла, используя sqlcmd, используя следующую команду:

sqlcmd -S <server> -d <database> -i <input file> -o <output file> 
      -U <user> -P <password>

Я запускаю свой sql-файл и выводю в файл журнала.

Проблема в том, что нужно изменить вывод sqlcmd в файл ... и я хочу получить вывод также в оболочку.

Ответы [ 3 ]

9 голосов
/ 09 сентября 2013

@ Noam,

В мире UNIX есть стандартная программа, которая читает из stdin и записывает в stdout и в указанный файл: команда tee .В следующем примере текущий каталог отображается на stdout и на «myfile»:

$ ls | tee "myfile"

Существует несколько портов с открытым исходным кодом для окон, таких как wintee идаже тривиально создать собственную реализацию (см. здесь ), но в PowerShell уже есть встроенная утилита: Tee-Object . Следующий пример аналогичен предыдущему, вPowerShell:

PS [c:\tmp]
> dir | tee myDirContents.txt

Следовательно, следующая команда выполнит myscript.sql в myserver, с использованием текущих учетных данных Windows, и ее результат будет выведен на консоль. и в "result.txt":

PS [c:\tmp]
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt"
3 голосов
/ 24 апреля 2012

@ Noam, хотя я не смог найти способ дублирования обработчика STDOUT, одно решение, которое может решить вашу проблему, состоит в том, чтобы выполнить сценарий sql в выходной файл (то есть result.txt), а затем использовать type result.txt для распечатать его в STDOUT.

c:>sqlcmd -i mysrcipt.sql -o result.txt -S myserver -E
c:>type result.txt

Если вам действительно нужно продублировать обработчик (возможно, команда занимает много времени, и вы не хотите ждать, пока она не закончится, прежде чем получить первые строки), вы можете сделать простую программу для копирования входных данных из STDIN в STDOUT, а также в файл. Затем вы можете переписать команду как:

c:>sqlcmd -i mysrcipt.sql -S myserver -E > duplicate.exe "result.txt"
0 голосов
/ 04 июля 2017

Этот код можно использовать для подключения, требующего аутентификации

sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...