在分区视图中修改数据

更新日期: 2005 年 12 月 5 日

如果分区视图不可更新,则它只能作为原始表的只读副本。可更新的分区视图可提供原始表的所有功能。

当视图是一组 SELECT 语句,这些语句各自的结果集使用 UNION ALL 语句合并在一起时,该视图被视为可更新的分区视图。每个 SELECT 语句引用一个 SQL Server 基表。该表可以是本地表,也可以是使用由四部分组成的名称、OPENROWSET 函数或 OPENDATASOURCE 函数引用的链接表(不能使用指定了直接传递查询的 OPENDATASOURCE 或 OPENROWSET 函数)。

此外,引用该视图的数据修改语句必须遵守为 INSERT、UPDATE 和 DELETE 语句定义的规则。

如果分区视图分布在多个服务器中,应避免对基表使用触发器或级联操作。触发器或级联操作可能会更改基础数据,这将影响视图定义。

只有当用户对视图下的每个表都具有 CONTROL、ALTER、TAKE OWNERSHIP 或 VIEW DEFINITION 权限时,才能更新分布式分区视图。有关详细信息,请参阅分布式分区视图元数据可见性故障排除

ms187067.note(zh-cn,SQL.90).gif注意:
必须装有 Microsoft SQL Server 2005 Enterprise Edition 或 Microsoft SQL Server 2005 Developer Edition,才能通过分布式分区视图修改数据。但是,在 SQL Server 2005 的所有版本中都可以通过本地分区视图修改数据。

INSERT 语句

INSERT 语句通过分区视图将数据添加到成员表中。INSERT 语句必须遵循下列规则:

  • 所有列必须包含在 INSERT 语句中,即使列在基表中可能为 NULL 或列在基表中定义了 DEFAULT 约束。
  • 不能在 INSERT 语句的 VALUES 子句中指定 DEFAULT 关键字。
  • INSERT 语句提供的值必须符合在一个成员表的分区列上定义的 CHECK 约束逻辑。
  • 如果一个成员表包含具有标识属性的列,则不能使用 INSERT 语句。
  • 如果成员表包含 timestamp 列,则不能使用 INSERT 语句。
  • 如果存在与同一视图或任意成员表的自联接,则不能使用 INSERT 语句。

UPDATE 语句

UPDATE 语句通过分区视图在一个或多个成员表中修改数据。UPDATE 语句必须遵循下列规则:

  • UPDATE 语句不能将 DEFAULT 关键字指定为 SET 子句中的值,即使列在相应的成员表中定义了 DEFAULT 值。
  • 不能更改带有标识属性的列的值,但是可以更新其他列。
  • 如果列包含 textimagentext 数据,则不能更改 PRIMARY KEY 的值。
  • 如果基表包含 timestamp 列,则不能进行更新。
  • 如果存在与同一视图或任意成员表的自联接,则不能进行更新。

DELETE 语句

DELETE 语句通过分区视图在一个或多个成员表中删除数据。如果存在与同一视图或任意成员表的自联接,则不能使用 DELETE 语句。

请参阅

概念

实施联合数据库服务器

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2005 年 12 月 5 日

新增内容:
  • 添加了有关更新分布式分区视图所需的权限的信息。
已更改的内容:
  • 删除了以下文本:“对于某个服务器中的本地分区视图,当针对一个或多个成员表定义了触发器、级联更新或级联删除时,便不能更新该视图。”