我有一个将两个表连接在一起的视图。
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
如果我更新CustomerName,它会在Customers表中更新它。 如何配置此视图,以便在更新客户名称时,它只接受cust表中存在的名称,否则将失败
更新:MS SQL
答案 0 :(得分:2)
您无法直接更新视图,这只是为您提供表中存在的数据的“视图”。有几个选项,您可以针对customer表创建完整性约束,通过应用程序前端处理它,或者如果您确实希望直接针对视图发出update语句,大多数rdbms会在视图上提供而不是触发器,从而允许您指定如果对视图执行语句,应如何更新基础表。
答案 1 :(得分:1)
您还没有说过您正在使用的DBMS,但对于SQL Server,请在您的View定义中添加WITH CHECK OPTION
。如果UPDATE
实际上是通过视图(ADO.Net和大多数其他访问方法的正常),那么这将检查它。
但是,如果它正在分解到基础表然后更新它们,那么这将无效(某些工具和较旧的访问方法会尝试这样做)。您可以使用适当的安全设置来停止此操作,但这可能会阻止它们完全正常工作。