web-dev-qa-db-ja.com

Visual Studio 2010展開スクリプトがオブジェクトを間違った順序で作成する-ストアドプロシージャの後でトリガーする

複雑なクエリで複数のテーブルから選択するビューを作成しました。

  • 複雑なため、ビューでこれらの操作を処理するために、挿入/更新/削除のINSTEAD OFトリガーを作成しました。
  • ビューを更新するストアドプロシージャも作成しました。

VS2010データベースプロジェクトをビルドすると、SQLスクリプトにはCREATEコマンドが(1)ビュー、(2)ストアドプロシージャ、(3)トリガーの順に含まれます。

ここで、展開スクリプトを実行すると、エラーが発生します。

*** SQL01268    D:\scripts\vs2010\Database.sql (28494,0).Net SqlClient Data Provider:
Msg 4405, Level 16, State 1, Procedure MyViewSave, Line 18 View or function 'MyView' is
not updatable because the modification affects multiple base tables

トリガーがストアドプロシージャの前に作成される場合、問題はありません。

ストアドプロシージャの前にトリガーが作成されていることを確認するにはどうすればよいですか?

ありがとう!

7
Dor Rotman

Visual Studio 2010で既知の問題が発生した可能性があります。

つまり、 Microsoftが推奨 Visual Studioが、デプロイメントスクリプトで無視していると思われるオブジェクトの依存関係を検出できるようにするには、次のようにします。

従属関係に関与するオブジェクトの名前をスキーマ修飾します。

したがって、開発中のすべてがdboスキーマにある場合は、スキーマ名に問題が発生するように、プロシージャ名とビュー名を先頭に追加してください。例えば: dbo.MyViewだけではなくMyView。 Visual Studioのオブジェクトを右クリックすると、リファクタリングメニューの下に「完全修飾名」機能があり、これをすばやく実行できます。

それでも問題が解決しない場合は、Googleを試して、上記のリンク先のページで提案されている回避策のいくつかを確認してください。何がうまくいったのか教えてください。

5
Nick Chammas