适用于:SQL Server
在许多情况下,可以更新“结果”窗格中显示的结果集(Visual Database Tools)。 但是,在某些情况下,无法。
通常,为了更新结果, 查询和视图设计器工具(Visual Database Tools) 必须有足够的信息来唯一标识表中的行。 例如,如果查询在输出列表中包括主键。 此外,必须具有足够的权限才能更新数据库。
如果查询基于视图,则可能能够更新它。 相同的准则适用,只是它们适用于视图中的基础表,而不仅仅是视图本身。
注意
查询和视图设计器无法提前确定是否可以基于视图更新结果集。 因此,它显示所有视图,即使你可能无法更新它们。
下表汇总了在“结果”窗格中你可能能够更新和不能更新查询结果的特定情况。 在许多情况下,正在使用的数据库决定了是否可以更新查询结果。
| 查询 | 是否可以更新结果? |
|---|---|
| 仅基于一个表进行查询,且输出列表包含主键。 | 是(下面列出的除外)。 |
| 基于没有唯一索引且没有主键的表进行查询 | 取决于查询和数据库。 如果有足够的信息可用于唯一标识记录,则某些数据库允许更新。 |
| 基于未联接的多个表进行查询 | 不。 |
| 基于数据库中标记为只读的数据进行查询 | 不。 |
| 基于涉及一个没有约束的表的视图进行查询 | 是(下面列出的除外)。 |
| 基于一对一关系联接的表进行查询 | 是(下面列出的除外)。 |
| 基于与一对多关系联接的表进行查询 | 通常。 |
| 基于三个或多个表的查询,其中存在多对多关系 | 不。 |
| 基于未向其授予更新权限的表进行查询 | 可以删除但不能更新。 |
| 基于未向其授予删除权限的表进行查询 | 可以更新但不能删除。 |
| 聚合查询 | 不。 |
| 基于包含总计或聚合函数的子查询进行查询 | 不。 |
包含要排除重复行的关键字的 DISTINCT 查询 |
不。 |
其 FROM 子句包括返回表的用户定义函数,用户定义函数包含多个 select 语句 |
不。 |
包含内联用户定义函数的 FROM 子句的查询 |
是的。 |
此外,可能无法更新查询结果中的特定列。 以下列表汇总了无法在“结果”窗格中更新的特定类型的列。
- 基于表达式的列
- 基于标量用户定义函数的列
- 其他用户删除的行或列
- 其他用户锁定的行或列(锁定的行通常在解锁后立即更新)
- 时间戳或 BLOB 列