BULK INSERT文を利用したAzure SQL Databaseへのデータ追加は、以下の記事のように実施できる。

ただ、SQLファイルに上記処理を記載しておくと、一括でBULK INSERT文を利用したAzure SQL Databaseへのデータ追加を行うことができる。
今回は、BULK INSERT文を利用してAzure SQL Databaseへデータ追加するSQLファイルを作成し実行してみたので、そのサンプルプログラムと実行手順を共有する。
前提条件
以下の記事に従って、Azure SQL Database・Azure Blob Storageの作成が完了していること。


また、A5M2からAzure SQL Databaseに接続できていること。その手順は、以下の記事を参考にすること。

SQLファイルの作成
作成したSQLファイル(bulk_insert_user_data.sql)の内容は、以下の通り。
----------------------------------------------------- -- 前処理 ----------------------------------------------------- -- 定数宣言 DECLARE @master_key NVARCHAR(20) = '(何らかのパスワード)'; DECLARE @blob_secret NVARCHAR(200) = '(BLOB SAS トークンの値)'; DECLARE @blob_url NVARCHAR(100) = 'https://azureblobpurinit.blob.core.windows.net/work'; -- 変数宣言 DECLARE @create_master_key NVARCHAR(100); DECLARE @db_scoped_cred NVARCHAR(1000); DECLARE @create_ext_ds NVARCHAR(1000); -- マスターキーの作成 SET @create_master_key = 'CREATE MASTER KEY ENCRYPTION BY PASSWORD =' + CHAR(39) + @master_key + CHAR(39); EXEC(@create_master_key); -- 資格情報の作成 SET @db_scoped_cred = 'CREATE DATABASE SCOPED CREDENTIAL AzureBlobPurinitCredential001 WITH IDENTITY = ''SHARED ACCESS SIGNATURE'' , SECRET = ' + CHAR(39) + @blob_secret + CHAR(39); EXEC(@db_scoped_cred); -- 外部データソースの作成 SET @create_ext_ds = 'CREATE EXTERNAL DATA SOURCE AzureBlobPurinitWorkDs001 WITH ( TYPE = BLOB_STORAGE , LOCATION = ' + CHAR(39) + @blob_url + CHAR(39) + ' , CREDENTIAL = AzureBlobPurinitCredential001 )'; EXEC(@create_ext_ds); -- 作成したマスターキー・資格情報・外部データソースを使えるようにするため、処理を確定させる GO ----------------------------------------------------- -- データ追加・確認 ----------------------------------------------------- -- 定数宣言 DECLARE @csv_file_name NVARCHAR(20) = 'test.csv'; -- 変数宣言 DECLARE @bulk_insert NVARCHAR(1000); -- BULK INSERT文の実行前確認 SELECT * FROM dbo.USER_DATA ORDER BY id ASC; -- BULK INSERT文の実行 SET @bulk_insert = 'BULK INSERT dbo.USER_DATA FROM ' + CHAR(39) + @csv_file_name + CHAR(39) + ' WITH ( DATA_SOURCE = ''AzureBlobPurinitWorkDs001'' , FORMAT = ''CSV'' , FIRSTROW = 1 , DATAFILETYPE = ''CHAR'' , CODEPAGE = ''65001'' )'; EXEC(@bulk_insert); -- BULK INSERT文の実行後確認 SELECT * FROM dbo.USER_DATA ORDER BY id ASC; -- 次処理で作成したマスターキー・資格情報・外部データソースを削除するため、処理を確定させる GO ----------------------------------------------------- -- 後処理 ----------------------------------------------------- -- 外部データソースの削除 DROP EXTERNAL DATA SOURCE AzureBlobPurinitWorkDs001; -- 資格情報の削除 DROP DATABASE SCOPED CREDENTIAL AzureBlobPurinitCredential001; -- マスターキーの削除 DROP MASTER KEY;
SSMSによるSQLファイルの実行
SSMSによるSQLファイルの実行結果は、以下の通り。
1) SSMSでAzure SQL Databaseにログインし、以下のように、コンソールにSQLファイルの内容を貼り付けた状態で「Execute」ボタンを押下する。
2) SQLが実行でき、以下のように、BULK INSERT前後のSELECT結果が表示されることが確認できる。
なお、SSMSのオプションは、以下のデフォルト(オートコミットされるモード)の設定で実行している。
sqlcmdコマンドによるSQLファイルの実行
sqlcmdコマンドによるSQLファイルの実行結果は、以下の通り。
1) コマンドプロンプトを起動し、sqlcmdコマンドの配置されているディレクトリに移動する。
cd C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn dir

なお、以下の「SQLCMD.EXE」が、sqlcmdコマンドになる。
2) 以下のように、user_dataテーブルを更新するためのSQLファイルを、「C:\tmp\bulk_insert_user_data.sql」に配置する。
3) sqlcmdコマンドを利用して、3)のSQLファイルの内容に従って、bulk insertを行う。
sqlcmd -S azure-db-purinit.database.windows.net -U purinit@azure-db-purinit -P (パスワード) -d azureSqlDatabase -i "C:\tmp\bulk_insert_user_data.sql" -o "C:\tmp\bulk_insert_user_data.log"

なお、sqlcmdコマンドは、「sqlcmd -S (ホスト名) -U (ユーザー名) -P (パスワード) -d (データベース名) -i (実行するSQLファイルパス) -o (実行結果を出力するファイルパス)」という形式で指定している。
4) 実行結果が出力されたファイル(bulk_insert_user_data.log)の内容は以下の通りで、2件のデータが追加されたことが確認できる。

要点まとめ
- BULK INSERT文を利用してAzure SQL Databaseへデータ追加する処理は、SQLファイルにまとめて記載しておくことができる。