次のコマンドを使用して、sqlcmd
を使用してファイルからSQLスクリプトを実行しようとしています。
sqlcmd -S <server> -d <database> -i <input file> -o <output file>
-U <user> -P <password>
SQLファイルを実行してログファイルに出力します。
問題は、これがsqlcmd
の出力をファイルに変更することです。また、シェルにも出力を取得したいと考えています。
@Noam、
UNIXの世界には、stdinから読み取り、stdoutandに指定のプログラムに書き込む標準プログラムがあります。ファイル: tee コマンド。次の例では、現在のディレクトリをstdoutおよび「myfile」に一覧表示します。
$ ls | tee "myfile"
wintee のようなWindows用のいくつかのオープンソースポートがあり、独自の実装を作成するのは簡単です( こちら を参照)が、PowerShellには既にこのユーティリティが組み込まれていますin: Tee-Object 次の例は、PowerShellでの前の例と類似しています。
PS [c:\tmp]
> dir | tee myDirContents.txt
したがって、次のコマンドは、現在のWindows資格情報を使用してmyscript.sqlをmyserver、に実行し、その結果は、 console and to "result.txt":
PS [c:\tmp]
> sqlcmd -i mysrcipt.sql -S myserver -E | tee "result.txt"
@Noam、私はSTDOUTハンドラーを複製する方法を見つけることができませんでしたが、おそらく問題を解決する1つの解決策は、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"