SQLServerから取得したレコードデータをPowerShell一発でCSVファイルに出力する方法
SQLServerから取得
業務上でSQLServerから情報を取得してCSVにするという案件が多いので、PowerShellでテンプレ化してみました。
メインの実行ファイルです。
. ".\config.ps1";
. ".\sql.ps1";
. ".\util-db.ps1";
# DBから取得
SQLServerSelect $dataSource $database $userId $password $sql;
Config系をまとめました。
[string]$dataSource = "localhost";
[string]$database = "Database";
[string]$userId = "sa";
[string]$password = "xxxx";
SQLだけ別ファイルで外だししました。
[string]$sql = "
SELECT @@version;
";
SQLServer認証でSQLServerにアクセスしてSelect分を発行しています。CSV形式で標準出力しております。
function SQLServerSelect([string]$dataSource, [string]$database, [string]$userId, [string]$password, [string]$sql){
# SqlConnectionStringBuilder を使用してSQL接続の設定を保存
[System.Data.SqlClient.SqlConnectionStringBuilder]$connectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder;
[object]$connectionString['Data Source'] = $dataSource;
[object]$connectionString['Initial Catalog'] = $database;
[object]$connectionString['User ID'] = $userId;
[object]$connectionString['Password'] = $password;
# DataTableを利用してSQL実行結果を一時格納
[System.Data.DataTable]$resultsDataTable = New-Object System.Data.DataTable;
# SQLConnection、SQLCommandを設定
[System.Data.SQLClient.SQLConnection]$sqlConnection = New-Object System.Data.SQLClient.SQLConnection($connectionString);
[System.Data.SQLClient.SQLCommand]$sqlCommand = New-Object System.Data.SQLClient.SQLCommand($sql, $sqlConnection);
# データベースへ接続
[object]$sqlConnection.Open();
# ExecuteReaderを実行してDataTableにデータを格納
[object]$resultsDataTable.Load($sqlCommand.ExecuteReader());
# CSV形式で標準出力
$resultsDataTable | ConvertTo-Csv -NoTypeInformation;
# データベース接続解除
[object]$sqlConnection.Close();
}
使用例
1.ps1配置場所に移動します
2.実行ポリシーを変更します
Set-ExecutionPolicy RemoteSigned -Scope Process -Force
3.実行します
.\exec.ps1 > out.csv
4.実行ポリシーを戻します
Set-ExecutionPolicy Restricted -Scope Process -Force
悪意のあるスクリプトを実行させないために実行ポリシーがデフォルトでは制限されている場合があります。
下記エラーが出力される場合は、上記使用例の2.を実行してください。戻す場合は4.となります。
.\exec.ps1 : このシステムではスクリプトの実行が無効になっているため、
ファイル ・・・.ps1 を読み込むことができません。
Author And Source
この問題について(SQLServerから取得したレコードデータをPowerShell一発でCSVファイルに出力する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/taskeknight/items/40d3da4a510fd2d06f48著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .