Azure SQL Database の一時テーブルに SqlBulkCopy が使えるようになっていた

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();
        }
    }
}