在分区视图中修改数据
如果分区视图不可更新,则它只能作为原始表的只读副本。可更新的分区视图可提供原始表的所有功能。
当视图是一组 SELECT 语句,这些语句各自的结果集使用 UNION ALL 语句合并在一起时,该视图被视为可更新的分区视图。每个 SELECT 语句引用一个 SQL Server 基表。该表可以是本地表,也可以是使用由四部分组成的名称、OPENROWSET 函数或 OPENDATASOURCE 函数引用的链接表(不能使用指定了直接传递查询的 OPENDATASOURCE 或 OPENROWSET 函数)。
此外,引用该视图的数据修改语句必须遵守为 INSERT、UPDATE 和 DELETE 语句定义的规则。
注意 |
---|
bcp 命令、BULK INSERT 语句或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 语句不支持向分区视图中进行大容量导入。但是,您可以使用 INSERT 语句在分区视图中插入多个行。 |
如果分区视图分布在多个服务器中,应避免对基表使用触发器或级联操作。触发器或级联操作可能会更改基础数据,这将影响视图定义。
只有当用户对视图下的每个表都具有 CONTROL、ALTER、TAKE OWNERSHIP 或 VIEW DEFINITION 权限时,才能更新分布式分区视图。有关详细信息,请参阅分布式分区视图元数据可见性故障排除。
注意 |
---|
仅当安装有 SQL Server 2008 Enterprise 或 SQL Server 2008 Developer 时才能通过分布式分区视图修改数据。但是,在 SQL Server 2008 的所有版本中都可以通过本地分区视图修改数据。 |
INSERT 语句
INSERT 语句通过分区视图将数据添加到成员表中。INSERT 语句必须遵循下列规则:
所有列必须包含在 INSERT 语句中,即使列在基表中可能为 NULL 或列在基表中定义了 DEFAULT 约束。
不能在 INSERT 语句的 VALUES 子句中指定 DEFAULT 关键字。
INSERT 语句提供的值必须符合在一个成员表的分区列上定义的 CHECK 约束逻辑。
如果一个成员表包含具有标识属性的列,则不能使用 INSERT 语句。
如果成员表包含 timestamp 列,则不能使用 INSERT 语句。
如果存在与同一视图或任意成员表的自联接,则不能使用 INSERT 语句。
UPDATE 语句
UPDATE 语句通过分区视图在一个或多个成员表中修改数据。UPDATE 语句必须遵循下列规则:
UPDATE 语句不能将 DEFAULT 关键字指定为 SET 子句中的值,即使列在相应的成员表中定义了 DEFAULT 值。
不能更改带有标识属性的列的值,但是可以更新其他列。
如果列包含 text、image 或 ntext 数据,则不能更改 PRIMARY KEY 的值。
如果基表包含 timestamp 列,则不能进行更新。
如果存在与同一视图或任意成员表的自联接,则不能进行更新。
DELETE 语句
DELETE 语句通过分区视图在一个或多个成员表中删除数据。如果存在与同一视图或任意成员表的自联接,则不能使用 DELETE 语句。