Azure SQL Database は着実に改善しているようで、以前はできなかった「SqlBulkCopy を使った一時テーブルへの書き込み」ができるようになっていた。
検証に使ったソースコードを貼っておく。
using System; using System.Configuration; using System.Data.SqlClient; namespace SQLDatabaseTempTableSample { class Program { static void Main(string[] args) { var tempTableName = $"#tbl{Guid.NewGuid().ToString("N")}"; var connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString; using (var connection = new SqlConnection(connectionString)) using (var tempConnection = new SqlConnection(connectionString)) { connection.Open(); tempConnection.Open(); // 一時テーブル作成 using (var cmd = tempConnection.CreateCommand()) { cmd.CommandText = $@" CREATE TABLE {tempTableName} ( product_kind SMALLINT, menu_id INT )"; cmd.ExecuteNonQuery(); } // 集計 using (var cmd = connection.CreateCommand()) { cmd.CommandText = @" SELECT TOP 10 product_kind, menu_id FROM menu"; using (var reader = cmd.ExecuteReader()) { // 一時テーブルにデータを挿入 using (var bulkCopy = new SqlBulkCopy(tempConnection)) { bulkCopy.DestinationTableName = tempTableName; bulkCopy.WriteToServer(reader); } } } // 一時テーブルの内容を表示する using (var cmd = tempConnection.CreateCommand()) { cmd.CommandText = $"SELECT * FROM {tempTableName}"; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("{0} | {1}", reader.GetInt16(0), reader.GetInt32(1)); } } } } Console.ReadLine(); } } }