web-dev-qa-db-ja.com

Azure SQLデータベースでSPを作成できません

Azure SQL Databaseの他のデータベーステーブルに結合しているAzure SQL Databaseにストアドプロシージャを作成しようとしています。

ストアドプロシージャの作成中に次のエラーが発生します。

メッセージ40515、レベル15、状態1、プロシージャsp_select、行16 [バッチ開始行0] 'database.dbo.table'内のデータベースまたはサーバー名への参照は、このバージョンのSQL Serverではサポートされていません。

Elastic Database Queryを使用してクロスデータベースクエリを作成できることを理解していますが、そのためのストアドプロシージャを作成するにはどうすればよいですか?

4
Shaurya S

Azure SQL DBでは、クエリでアドホック3部構成の名前(database.schema.table)を使用できません。

Azure SQL DBマネージドインスタンス する-しかし、それは別の製品です。多数の既存のストアドプロシージャ(たとえば、数百)がさまざまなデータベース(たとえば、数千)にある多数の既存のオブジェクトを参照している場合、これから説明する方法よりもマネージドインスタンスに移行する方が簡単な場合があります。

Azure SQL DBでデータベース間クエリを機能させるには、クエリを実行する各データベースで、次のことを行う必要があります。

  1. リンクサーバーのような外部データソースを作成する
  2. 外部テーブルを作成します-これは、クエリするテーブルを指すビューのようなもので、外部データソースを通過します

手順はかなり単純です ですが、ここが苦痛な部分です。クエリを実行するすべてのデータベース、クエリを実行するすべてのテーブル/ビューなどについて、これを行う必要があります。さらに、テーブルが変更された場合(新しい列が追加された場合やデータ型が変更された場合など)、前に戻って、それを指すすべての外部テーブル参照に再度アクセスし、その構造も変更する必要があります。

これは、Azure SQL DBで「技術的に機能する」機能の1つですが、実際には新しいゼロからのアプリケーションでのみ機能し、既存のアプリケーションをクラウドに移行しません。先ほど言ったように、多くのオブジェクトを参照するこれらのクエリがたくさんある場合は、マネージドインスタンスの方が適している理由を理解できました。

4
Brent Ozar