web-dev-qa-db-ja.com

SSDT-リンクサーバーの一時テーブルへの未解決の参照

これがシナリオです。

ETLプロセスの一部として、リンクサーバーを介してOracleデータベースのテーブルからデータを抽出しています。 SQL Serverデータツール(SSDT)を使用してVisual Studio2013でソリューションを開発しています。

ETLプロシージャは、EXECUTE AT構文を介してOracleデータベースに動的に作成される一時テーブルを使用します。これにより、SQLServerデータベースから一時テーブルに少数のレコードを挿入できます。 Oracleデータベース内のはるかに大きなソーステーブル(約2,000万行)への結合を実行するため。insertステートメントは、次のように4つの部分からなる命名を使用します。

INSERT INTO [linked-server]..[owner-name].[table-name]
SELECT a, b FROM [stage].[table-name];

ただし、テーブルは一時的なものであるため、私のプロジェクトには未解決の参照に関する警告が含まれています。

SQL71562:プロシージャー:[schema]。[procedure-name]に、オブジェクト[linked-server]。[]。[owner-name]。[table-name]への未解決の参照があります

また、データベースプロジェクトを公開すると、一時テーブルが存在しないため、公開操作が失敗します。エラーメッセージは次のとおりです。

リンクサーバー "[linked-server]"のOLE DBプロバイダー "OraOLEDB.Oracle"には、テーブル "" [owner-name] "。" [table-name] ""が含まれていません。 。テーブルが存在しないか、現在のユーザーにそのテーブルに対する権限がありません。

I can最初にSQL Management Studioを介して一時テーブルを作成し、プロジェクトの公開後に削除して、プロジェクトを公開します。しかし、これはデータベースプロジェクトの仕組みに反しているようです。

未解決の参照に対するT-SQL警告を抑制することについての提案を見てきましたが、それではプロジェクトを公開できません。

ノート:

  1. Oracleデータベースはサードパーティのアプリケーションに属しているため、データベースに永続的なテーブルを作成できません
  2. SSDTプロジェクトでリンクサーバーオブジェクトを作成しました
1
Jazza

これは古い質問だと思いますが、この投稿で他の誰かが起こった場合に備えて、これを捨てたいと思います。 SQLデータベースプロジェクトに「scripts」フォルダを作成し、Oracleで一時テーブルを作成するPre-Deployスクリプトを追加します。スクリプトを右クリックして、ビルドアクションをPreDeployに設定します。私はそれが最もエレガントな解決策ではないことを知っていますが、それは速くて汚いです、そして仕事を成し遂げるでしょう。

プロジェクトを公開する前にプロジェクトを「ビルド」する必要がありますが、それでも未解決のオブジェクトエラーが生成される可能性があります。その場合、ビルドする前にテーブルを作成し、後でドロップする必要がありますが、機能するはずです。

2
Lizzy