4

Visual Studio 2010データベースプロジェクトがあり、既存のスキーマをインポートしました。このデータベースには、Integration Servicesのシステムテーブルdbo.sysssislogを参照するストアドプロシージャがあり、プロジェクトでいくつかの警告が生成されています。"プロシージャにオブジェクトdbo.sysssislogへの参照が未解決です"

master.dbschemaとmsdb.dbschemaをデータベース参照として追加しようとしましたが、参照のデータベース名をmasterdbの代わりにtempdbに変更しようとしましたが、問題は解決しません。

msdb.dbschemaファイルを開いたので、sysssislogテーブルがファイルに存在することを確認しました。ここで

は警告です:

SQL04151: Procedure: [dbo].[storedProcedureName] has an unresolved reference to object [dbo].[sysssislog]. 

答えて

4

dbo.sysssislogは(システムテーブルとしてマークされた)ユーザテーブルがあるSQL Serverの統合サービス(SSIS)によって作成され、自動的に、あなたは、イベントとパッケージを作成するときSQL Serverの種類のログ。このテーブルのほかに、SSISはロギングプロセスを支援するためのストアドプロシージャ(ALTER)を作成します。

は、それはあなたが言及したストアドプロシージャをインポートの結果、データベースのスキーマをインポートし、それをシステムテーブルとしてマークされていますので、ないは、dbo.sysssislogテーブルをインポートするためか、プロジェクト内の未解決の参照です。

これで、インポートしていないテーブルを参照する一連のストアドプロシージャが表示され、警告が表示されます。

警告を取り除くためにできることは、DROPと再CREATEのテーブルを手動で(これはシステムテーブルのマークを "削除"するための唯一の方法です)、プロジェクトにインポートすることです。

は、新しい空のSSDTプロジェクトを作成します「sysssislog」それを呼び出すと、それにsysssislogテーブルのスクリプトを追加します。ここでは

+0

これをユーザーテーブルとして作成しても、別の動作をすることはありませんか?私はちょうどそのソリューションが確実に進んでいることを確認したいと思います。サーバー上のシステムテーブルとしてではなく、ソースコントロール内のユーザーテーブルとして管理する必要があります。 –

+0

いいえ、そうはなりません。私は通常、カスタムロギング用の新しい列を追加するためにテーブルを変更していますが、何の問題もありませんでした。 – gonsalu

+0

いいね、ありがとう、とりあえず落として作り直すことのヒントは役に立ちました。 – cdonner

1

は、代替とクリーンなアプローチです。プロジェクトをビルドして、dacpacファイル "sysssislog.dacpac"を生成します。

SSDTプロジェクトでは、dacpacファイルにdatabasereferenceを追加し、[Add Database Reference]ダイアログでデータベースの場所を[Same Database]にします。

プロジェクトがソース管理下にある場合は、プロジェクトにdacpacを追加してから参照を追加すると、dacpacファイルもソース管理下に置かれます。

+0

私はこれを行いました。これはうまくいくように見えましたが、(非常に)不思議なことに、パブリッシュはテーブルを作成しようとしました。私はこの機能(同じデータベースを使用して)を使用すると、データベースのセクションをロックダウンしたり、データベース間で共有ソースコード\テーブルを含めることができます(監査やログなど) – Trubs

関連する問題