SqlBulkCopyを実行してくれるコマンドレットを作って公開しました。

高速にテーブルへのデータ登録をおこなうことが出来る SqlBulkCopy をラップしたコマンドレットを自作して公開しました。

github.com

www.powershellgallery.com

どんなツール?

サポートされたフォーマットのCSVとテーブル名を渡して実行するとCSVの値がテーブルへ登録されます。

SQL Serverを対象にしています。

使い方は?

以下のように実行することでテーブルへ登録できます。

Invoke-SqlBulkCopy `
  -ServerInstance {SQL Serverのサーバーインスタンス名, default: 実行端末のコンピューター名} `
  -Database {対象データベース名} `
  -Username {対象データベースのユーザー名} `
  -Password {対象データベースのユーザーパスワード} `
  -TableName {バルクコピー先のテーブル名} `
  -CsvFilePath {後述のフォーマットに従ったCSVファイルのパス}
  -ConnectionTimeout {接続タイムアウト時間(秒), default: 15秒}

また、CSVのフォーマットは以下のような内容になっています。

行目 内容 備考
1行目 カラム名 -
2行目 SQL Server型名 ? をつけるとNULL許容として認識します
3行目以降 DBNULL とするとNULLで格納されます

例えば、以下のようなフォーマットになります。

Id,Name,Age,IsMale
int,nvarchar,int,bit?
1,Bob,20,1
2,Alice,21,0
3,John,22,DBNULL

今後の課題

byte[], Guid, object, XmlElement, DateTimeOffsetに関しては動作未確認です。 今回はインストールして手動でテストしましたが、ちゃんとテストコードを書いてみて上記も動作確認してみようと思います。