Как запустить файл сценария sql с помощью sqlcmd и выводить как в оболочку, так и в файл

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

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

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

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

3 ответов


@Noam,

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

$ ls | tee "myfile"

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

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

следовательно, следующая команда будет выполняться именем MyScript.в SQL на myserver, используя текущие учетные данные windows, и его результат будет выведен либо на консоль и to " результат.txt":

PS [c:\tmp]
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt"

@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"

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

sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password"