更新结果的规则 (Visual Database Tools)

适用于:SQL Server

在许多情况下,你可以更新 结果窗格中显示的结果集。 但是,有些时候你不能。

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

如果查询基于视图,则可能能够更新它。 相同的准则适用,只是它们适用于视图中的基础表,而不仅仅是视图本身。

注意

查询和视图设计器无法提前确定是否可以基于视图更新结果集。 因此,它显示所有视图,即使你可能无法更新它们。

下表汇总了在“结果”窗格中你可能能够更新和不能更新查询结果的特定情况。 在许多情况下,正在使用的数据库决定了是否可以更新查询结果。

查询 是否可以更新结果?
仅基于一个表进行查询,且输出列表包含主键。 是(下面列出的除外)。
基于没有唯一索引且没有主键的表进行查询 取决于查询和数据库。 如果有足够的信息可用于唯一标识记录,则某些数据库允许更新。
在多个未联接的表上查询 不。
基于数据库中标记为只读的数据进行查询 不。
基于涉及一个没有约束的表的视图进行查询 是(下面列出的除外)。
基于一对一关系联接的表进行查询 是(下面列出的除外)。
基于与一对多关系联接的表进行查询 通常。
基于三个或多个表的查询,其中存在多对多关系 不。
基于未给予更新权限的表进行查询 可以删除但不能更新。
基于没有授予删除权限的表进行查询 可以更新但不能删除。
聚合查询 不。
基于包含总计或聚合函数的子查询进行查询 不。
包含 DISTINCT 关键字以排除重复行的查询 不。
FROM 子句中包含返回表的用户定义函数,并且该用户定义函数包含多个 select 语句的查询 不。
FROM 子句包含内联用户定义函数的查询 是的。

此外,可能无法更新查询结果中的特定列。 以下列表汇总了无法在“结果”窗格中更新的特定类型的列。

  • 基于表达式的列

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

  • 其他用户删除的行或列

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

  • 时间戳或 BLOB 列

另请参阅

设计查询和视图操作指南(Visual Database Tools)