更新结果的规则
在很多情况下,可以更新显示在“结果”窗格中的结果集。 然而,在某些情况下不能这样做。
一般情况下,为了更新结果,查询和视图设计器必需具备足够的信息才能唯一地标识表中的行。 例如,查询在输出列表中包括主键时。 此外,您还必须有足够的权限才能更新数据库。
如果基于视图进行查询,也许可以进行更新。 同样的原则不仅仅适用于视图本身,除非这些原则适用于视图中的基础表。
提示
查询和视图设计器无法事先确定您是否可更新基于视图的结果集。 因此,尽管您可能无法更新所有的视图,但查询设计器仍会把它们全部显示出来。
下表汇总了一些特定实例,在这些例子中您也许可以更新“结果”窗格中的查询结果,也许不能。 在许多情况下,正在使用的数据库决定是否可以更新查询结果。
查询 |
是否可以更新结果? |
---|---|
基于某个表的、输出列中包含主键的查询 |
是(但下面列出的除外)。 |
基于无唯一索引和无主键的表的查询 |
取决于查询和数据库。 有些数据库允许在有足够的信息用于唯一地识别记录时进行更新。 |
基于多个未联接的表的查询 |
不能。 |
基于数据库中标记为只读数据的查询 |
不能。 |
基于包含一个无约束表的视图的查询 |
是(但下面列出的除外)。 |
基于一对一关系联接的表的查询 |
是(但下面列出的除外)。 |
基于一对多关系联接的表的查询 |
通常是。 |
基于有多对多关系的表(不少于三个)的查询 |
不能。 |
基于未授予更新权限的表的查询 |
可删除但不可更新。 |
基于未授予删除权限的表的查询 |
可更新但不可删除。 |
聚合查询 |
不能。 |
基于包含有总计或聚合函数的子查询的查询 |
不能。 |
包括 DISTINCT 关键字(用于排除重复的行)的查询 |
不能。 |
FROM 子句包括用户定义函数的查询(查询返回一个表且用户定义函数包含有多个 Select 语句) |
不能。 |
FROM 子句中包括内联用户定义函数的查询 |
是。 |
此外,您也许不能在查询结果中更新特定的列。 下面的列表汇总了不能在“结果”窗格中更新的特定类型的列。
基于表达式的列
基于标量用户定义函数的列
其他用户删除的行或列
其他用户锁定的行或列(通常,锁定的行在解锁后就可更新)
Timestamp 或 BLOB 列
请参见
概念
使用 Visual Database Tools 可做的工作