新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Azure SQL Databaseで、データベースをまたいだクエリは書かない方がいい

SQL Serverを使うのは、Azure SQL Databaseが初めてだったので知らなかったのですが、SQL Serverでは、データベースをまたいだクエリは、下記のように、データベースを指定することによって簡単に書けます。

SELECT
  *
FROM [<db_name>].dbo.test_table

しかし、Azure SQL Databaseで同じことをすると、下記のようなエラーが出てできません。

Failed to execute query. Error: Reference to database and/or server name in '<db_name>.dbo.test_table' is not supported in this version of SQL Server.

Azure SQL Databaseでデータベースをまたいだクエリを書くには、「エラスティック データベース クエリ 」を使って、参照先のテーブルを、外部テーブルとして定義しておく必要があります。

docs.microsoft.com docs.microsoft.com

しかし、テーブル1個づつ定義を作らないといけないので、結構手間です…。

結論

Azure SQL Databaseでは、頻繁に参照するテーブルは、同じデータベースの中に置き、データベースを、安易にテーブル分類手段としては使用しない方が良さそうですね。

感想など

エラスティックプールを使えば大丈夫かなと思って試したのですがダメでした。

Azure SQL Databaseは、ポータル上のくくりは、[サーバー]->[データベース]という階層になっていますが、物理的なサーバーは「データベース」単位で別物のようです。

Azure SQL Databaseでは、データベースを切り替えるUSEコマンドが使えないので、どうしてだろう?と思っていたのですが、データベース毎にサーバーが違うからなんですね。

USE (Transact-SQL) - SQL Server | Microsoft Docs

Azure SQL Database マネージドインスタンス」ならできそうですね。でもこれって、Azure SQL Databaseと言うより、単にSQL ServerをインストールしたWindows PCのような気が…。