Как запустить файл сценария 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"