更新结果的规则

在很多情况下,可以更新显示在“结果”窗格中的结果集。 然而,在某些情况下不能这样做。

一般情况下,为了更新结果,查询和视图设计器必需具备足够的信息才能唯一地标识表中的行。 例如,查询在输出列表中包括主键时。 此外,您还必须有足够的权限才能更新数据库。

如果基于视图进行查询,也许可以进行更新。 同样的原则不仅仅适用于视图本身,除非这些原则适用于视图中的基础表。

提示

查询和视图设计器无法事先确定您是否可更新基于视图的结果集。 因此,尽管您可能无法更新所有的视图,但查询设计器仍会把它们全部显示出来。

下表汇总了一些特定实例,在这些例子中您也许可以更新“结果”窗格中的查询结果,也许不能。 在许多情况下,正在使用的数据库决定是否可以更新查询结果。

查询

是否可以更新结果?

基于某个表的、输出列中包含主键的查询

是(但下面列出的除外)。

基于无唯一索引和无主键的表的查询

取决于查询和数据库。 有些数据库允许在有足够的信息用于唯一地识别记录时进行更新。

基于多个未联接的表的查询

不能。

基于数据库中标记为只读数据的查询

不能。

基于包含一个无约束表的视图的查询

是(但下面列出的除外)。

基于一对一关系联接的表的查询

是(但下面列出的除外)。

基于一对多关系联接的表的查询

通常是。

基于有多对多关系的表(不少于三个)的查询

不能。

基于未授予更新权限的表的查询

可删除但不可更新。

基于未授予删除权限的表的查询

可更新但不可删除。

聚合查询

不能。

基于包含有总计或聚合函数的子查询的查询

不能。

包括 DISTINCT 关键字(用于排除重复的行)的查询

不能。

FROM 子句包括用户定义函数的查询(查询返回一个表且用户定义函数包含有多个 Select 语句)

不能。

FROM 子句中包括内联用户定义函数的查询

是。

此外,您也许不能在查询结果中更新特定的列。 下面的列表汇总了不能在“结果”窗格中更新的特定类型的列。

  • 基于表达式的列

  • 基于标量用户定义函数的列

  • 其他用户删除的行或列

  • 其他用户锁定的行或列(通常,锁定的行在解锁后就可更新)

  • Timestamp 或 BLOB 列

请参见

概念

使用 Visual Database Tools 可做的工作

其他资源

设计查询和视图

参考 (Visual Database Tools)