Как запустить sql script файл с помощью sqlcmd и вывести на оболочку и файл
Я пытаюсь запустить sql script из файла с помощью sqlcmd
, используя следующую команду:
sqlcmd -S <server> -d <database> -i <input file> -o <output file>
-U <user> -P <password>
Я запускаю свой sql файл и выводя его в файл журнала.
Проблема в том, что это изменение вывода sqlcmd
в файл.. и я хочу получить вывод также в оболочку.
Ответы
Ответ 1
@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"
Ответ 2
@Noam, хотя я не мог найти способ дублирования обработчика STDOUT, одним из решений, которое может решить вашу проблему, является выполнение sql script в выходной файл (т.е. 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"
Ответ 3
Этот код может использоваться для подключения, требующего аутентификации
sqlcmd -S "server_name" -d "database_name" -i "input_file" -o "output_file" -U "user_name" -P "password"