如果定义视图的 SELECT 语句不包含 GROUP BY 子句、集合函数或不涉及 UNION 子句,则可以更新视图。
插入到表中的字符串始终以它们输入时的大小写形式存储,无论数据库是否区分大小写。因此,用字符串 Value 更新的字符数据类型列在数据库中保存的形式始终是 V 为大写,其它字母均为小写。SELECT 语句返回的字符串为 Value。但是,如果数据库不区分大小写,所有比较都会将
Value 与 value、VALUE 等不同大小写形式的字符串视为相同。而且,如果单列主键已经包含 Value 条目,则会拒绝对 value 执行 INSERT,因为它会导致主键不唯一。
可选的 FROM 子句允许根据连接更新表。如果存在 FROM 子句,WHERE 子句将限定 FROM 子句的行。仅更新表列表中紧跟在 UPDATE 关键字后面的数据。
如果使用 FROM 子句,应以同样的方式在语句的两个部分限定要更新的表名,这点很重要。如果在一个位置使用了相关名,则在另一个位置也必须使用该相关名,否则将发生错误。
语法 1 和语法 2 仅适用于 SQL Remote。
不带 OLD 和 NEW SUBSCRIBE BY 表达式的语法 2 必须用于 BEFORE 触发器中。
语法 2 仅用于 SQL Remote。如果不使用 OLD 和 NEW 表达式,它必须在 BEFORE 触发器内使用,以便能够访问相关的值。其目的是每当列表更改时都提供 SUBSCRIBE BY 值的完整列表。它放在 SQL Remote 触发器中,以便数据库服务器能够计算
SUBSCRIBE BY 值的当前列表。这两个列表都放置在事务日志中。
UPDATE 语句的语法 2 允许显式指定旧 SUBSCRIBE BY 列表和新 SUBSCRIBE BY 列表,从而使 SQL Remote 触发器的效率更高。如果缺少这些列表,数据库服务器将计算发布定义中的旧 SUBSCRIBE BY 列表。由于新
SUBSCRIBE BY 列表与旧 SUBSCRIBE BY 列表通常只是稍微有点差别,因此可能会执行两次旧列表的计算。通过既指定旧列表又指定新列表,可以避免这种额外的工作。
当表达式用相同的预订更新同一触发器内的许多表时,OLD 和 NEW SUBSCRIBE BY 语法尤其有用。这样可以动态地提高性能。
SUBSCRIBE BY 表达式是一个值或一个子查询。
UPDATE 语句的语法 2 用于实现特定的 SQL Remote 功能,并且在 BEFORE 触发器内使用。