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