3

SQL サーバー Management Studio 2008 を使用しています。

すべての列のそのレコードに null 値を表示するビューの 1 つから単一のレコードを削除したいと考えています。

どのテーブルからこのヌル レコードを取得したのかわかりません。

ビューに結合されているすべてのテーブルを確認しましたが、null レコードを含むテーブルはありません。

私のビューとすべての関連テーブルからこのnullレコードを削除するのを手伝ってくれる人はいますか..?

このビューを他の多くのページで使用しているため、各ページで null 値のエラーが発生します。

このレコードをビューから削除しようとすると、次のようなエラーが表示されます

"Msg 4405, Level 16, State 1, Line 1
View or function 'viewGetProgressOverview' is not updatable because the modification affects multiple base tables."
4

4 に答える 4

5

単一のテーブルに基づく SQL でビューを作成した場合、ビューで実行する DML 操作は、ベース テーブルに自動的に伝達されます。

ただし、複数のテーブルを結合してビューを作成した場合、ビューに対して DML ステートメントを実行すると、以下のエラーが発生します

Msg 4405, Level 16, State 1, Line 1
View or function 'ViewName' is not updatable because the modification affects
multiple base tables.

結合ビューの更新のルールは次のとおりです。

結合ビューに対する INSERT、UPDATE、または DELETE 操作では、一度に 1 つの基本ベース テーブルのみを変更できます。

更新ルール

結合ビューのすべての更新可能な列は、キー保存テーブルの列にマップする必要があります。キー保存表の説明については、「キー保存表」を参照してください。ビューが WITH CHECK OPTION 句で定義されている場合、すべての結合列と繰り返しテーブルのすべての列は更新できません。

削除ルール

結合内にキー保存テーブルが 1 つだけ存在する限り、結合ビューからの行を削除できます。ビューが WITH CHECK OPTION 句で定義され、キー保存テーブルが繰り返される場合、行はビューから削除できません。

挿入規則

INSERT ステートメントは、非キー保存テーブルの列を明示的または暗黙的に参照してはなりません。結合ビューが WITH CHECK OPTION 句で定義されている場合、INSERT ステートメントは許可されません。

参照 : -

ビューへの挿入 – INSTEAD OF TRIGGER – SQL Server

結合されたテーブルを含む SQL 更新可能ビュー

于 2012-12-25T12:23:09.347 に答える
1

ビューの結果からレコードを非表示にすることはできませんか? 例えば

where subscriptionID IS NOT NULL
于 2012-12-25T12:08:04.463 に答える
0

私が取る必要がある最後のステップは、最後のバックアップでホールデータベースを再作成し、そのバックアップ後に作成したテーブルを再作成することです..今、私の問題も解決しました. あなたの返信と助けをありがとう..

于 2012-12-26T05:49:29.680 に答える
0

ビュー定義に外部結合が含まれている場合、dbms はおそらくそれらの null を作成しています。ビューに外部結合が必要な場合、実際にはこれらの null を回避する方法はありません。それらをそのままにしておくと、null が表示されます。それらを非表示にすると、外部結合の目的が無効になります。

必要な外部結合と一致するそれらを削除する唯一の方法は、保持されたテーブルから行を削除することです。(dbms が null を作成する原因となっているキーを持つ行。)

保存されたテーブルで問題のある行を特定できない唯一の理由は、ビューにそのテーブルの候補キーがまったく含まれていないことです。適切なキーが見つかるまで、各テーブルから候補キーを 1 つずつ追加します。そのためにビュー定義を変更する必要はありません。ビューの SELECT ステートメントを SQL ウィンドウにコピーするだけです。

于 2012-12-25T12:15:35.860 に答える