分布式分区视图元数据可见性故障排除

新建日期: 2005 年 12 月 5 日

如果低特权用户尝试通过分布式分区视图插入、更新或删除数据,则 SQL Server 将生成以下错误:

错误 4436:“UNION ALL 视图 '%.*ls' 不可更新,因为没有找到分区依据列。”

此问题不会影响本地分区视图,例如,当所有基础表都在同一 SQL Server 实例上时。

后台

对于分布式查询,SQL Server 必须能够读取远程(链接)服务器表的 CHECK 约束的 SQL 定义。这意味着分布式查询的调用方必须对远程表具有 CONTROL、ALTER、TAKE OWNERSHIP 或 VIEW DEFINITION 权限。如果分布式查询的调用方不具备这些权限之一,则查询将失败,并生成错误 4436。

ms345509.note(zh-cn,SQL.90).gif注意:
如果用户不具备这些权限之一,则在用户查询目录时,sys.check_constraints 中的 definition 列的值将为 NULL。

解析错误 4436

若要使调用方可以看到 CHECK 约束的定义,请为调用方授予对分布式分区视图下每个目标表的 VIEW DEFINITION 权限。

例如,假定 Server1 Server2 是联合服务器,并定义为互为链接服务器。假定 master.dbo.t1 是可由 dpv_users 数据库角色的所有成员访问的已分区表。假定 dpv_users 的所有用户都对分布式分区视图具有 SELECT、INSERT、UPDATE 和 DELETE 权限。

在每台链接服务器中都执行以下代码。

CREATE TABLE t1(c INT PRIMARY KEY CHECK (...)) ; -- CHECK is different on each server.
GO

GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON t1 TO dpv_users ;
GO

CREATE VIEW the_dpv AS
    SELECT * FROM Server1.master.dbo.t1
    UNION ALL
    SELECT * FROM Server2.master.dbo.t1 
GO

请参阅

任务

元数据可见性故障排除

概念

元数据可见性配置
创建分布式分区视图

其他资源

CREATE VIEW (Transact-SQL)
GRANT (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助