SQL Server 2005では、SELECT
ステートメントを使用して作成されたビューがいくつかあります。ビューにUPDATE
およびDELETE
ステートメントを記述できますか?
それがあなたが求めているものであれば、ビューから削除することはできますが、情報を削除するビューを持つことはできません。ビューは、基になるテーブルのデータの一部です。権限がある場合は、テーブルに対して直接実行できるのと同じデータ操作をビューで実行できます。
したがって、次のようなことができます。
DELETE FROM my_View WHERE id = 3;
このMSDNの記事から: ビューを介したデータの変更 、
ビューで変更される列は、テーブル列の基になるデータを直接参照する必要があります。これらは、次のような他の方法で導出することはできません。
変更される列は、GROUP BY、HAVING、またはDISTINCT句の影響を受けません。
残りの記事を参照してください...
フォローするとどうなりますか
Create view table1_View
as
select *
from table1
go
delete
from table1_view
チェックしたところ、このコマンドはtable1からすべてのデータを削除しました
**
ビューを使用したデータの更新:
**ビューは、データを更新するクエリで使用できますが、いくつかの制限があります。ビューはテーブルではなく、データが含まれていないことに注意してください。実際の変更は常にテーブルレベルで行われます。ビューは、基本テーブルで定義されている制約、ルール、または参照整合性をオーバーライドするメカニズムとして使用することはできません。
ビューを介したデータ更新の制限次の制限に従って、ビューの行を挿入、更新、および削除できます。
ビューに複数のテーブル間の結合が含まれている場合、ビューに挿入および更新できるのは1つのテーブルのみであり、行を削除することはできません。
ユニオンクエリに基づいてビューのデータを直接変更することはできません。 GROUP BYまたはDISTINCTステートメントを使用するビューのデータは変更できません。
変更されるすべての列には、ステートメントがベーステーブルに対して直接実行されている場合と同じ制限が適用されます。
テキストと画像の列は、ビューを介して変更することはできません。
ビュー基準のチェックはありません。たとえば、ビューでパリに住むすべての顧客が選択され、City = 'Paris'を持たない行を追加または編集するようにデータが変更された場合、データはベーステーブルで変更されますが、ビューには表示されません。 、ビューを定義するときにWITH CHECKOPTIONが使用されていない限り。詳細についてはこれを確認してください 記事
ビュー自体で許可されている制限付きの更新に加えて、INSTEAD OF
トリガーを使用して、より複雑な変更を実行できます。 INSTEAD OF
を使用すると、基本的に更新または削除をインターセプトし、ほとんどすべての変更を実行できます。参照: MSDN記事 。
Srinivasの詳細な説明は、の点で答えます。
UPDATE、INSERT、およびDELETEステートメントを含むすべての変更は、1つのベーステーブルからの列のみを参照する必要があります。
ベーステーブル構造を管理できる限り、トリガーのINSTEAD OFを使用してこれを回避する方法があります。 INSTEAD OFトリガーを使用すると、ビューに対するINSERT、UPDATE、またはDELETE操作をオーバーライドできます。たとえば、ビューにINSTEAD OF INSERTトリガーを定義して、標準のINSERTステートメントを置き換えることができます。
以下のビューを作成したと仮定します。
CREATE VIEW AuthorsNames
AS
SELECT au_id, au_fname, au_lname
FROM authors
ビューに表示されていない列にデータを挿入したい場合があります。これを行うには、挿入を処理するためにビューにINSTEADOFトリガーを作成します。
CREATE TRIGGER ShowInsert on AuthorsNames
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO authors
SELECT address, au_fname, au_id, au_lname, city, contract, phone, state, Zip
FROM inserted
END
この方法を使用すると、複数のテーブルに挿入できますが、基になるテーブルを多数処理する場合、これはより複雑になります。 MSDNを参照
答えは、ビューが更新可能なビューであるか、更新不可能なビューであるかによって決まります。
更新可能なビューは、基になるテーブルのnull以外のすべての列を含むビューです。
その場合、ビューでのur update、delete、insertクエリは、基になる実テーブルのデータに影響します。
それでおしまい .....