3

我有一个将两个表连接在一起的视图。

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 回答