3

2 つのテーブルを結合するビューがあります。

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

CustomerName を更新すると、Customers テーブルで更新されます。このビューを構成して、顧客名を更新するときに cust テーブルに存在する名前のみを受け入れるか、それ以外の場合は失敗するようにするにはどうすればよいですか?

更新: MS SQL

4

2 に答える 2

2

実際にビューを直接更新することはできません。これは、テーブルに存在するデータの「ビュー」を提供するだけです。いくつかのオプションがあります.顧客テーブルに対して整合性制約を作成し、アプリケーションのフロントエンドを介して処理するか、ビューに対して直接更新ステートメントを発行したい場合は、ほとんどのrdbmsがビューの代わりにトリガーを提供します。ビューに対してステートメントが実行された場合に、基になるテーブルを更新する方法を指定します。

于 2013-06-26T20:31:27.380 に答える
1

使用している DBMS はまだ指定されていませんが、SQL Server の場合はWITH CHECK OPTION、ビューの定義に追加してください。UPDATEが実際にビューを通過している 場合(ADO.Net および他のほとんどのアクセス方法では通常)、これはそれをチェックします。

ただし、基礎となるテーブルに分解してから更新する場合、これは機能しません (一部のツールや古いアクセス方法はこれを試みます)。適切なセキュリティ設定でこれを停止できますが、完全に機能しなくなる可能性があります。

于 2013-06-26T20:36:58.000 に答える