更新作为两个表的并集的视图中的值

问题描述 投票:0回答:1

我有两个简单的表(没有约束、一个主键、没有触发器等)托管在 SQL Server 上,它们具有相同的架构。由于各种原因,我必须将表格分开,但我希望能够将它们合并在一起以进行监督。我希望一名工作人员能够通过这个联合视图编辑表格。

GlobalID 是每个表的主键,并且在联合视图中也是唯一的。

CREATE VIEW V_View AS 
SELECT
[GlobalID]
,[UserComment]
FROM
TABLE_A

UNION

SELECT
[GlobalID]
,[UserComment]
FROM
TABLE_B

我尝试通过几个应用程序(Code on Time 和 Microsoft Access)编辑此视图中的数据,但出现相同的错误:

更新或插入视图或函数 V_View 失败,因为它包含派生字段或常量字段

如果我从视图中删除联合,以便只有一个或另一个表起作用,则编辑可以完美地工作,因此我确信是 UNION 命令阻止了编辑。

有什么方法可以使这样的视图可编辑吗?我可以用不同的方式构造它,以便派生/恒定错误不会妨碍编辑吗?

sql sql-server view
1个回答
0
投票

如所写,视图不可更新,因为 SQL Server 不知道哪些行属于哪个表。

您需要的概念称为“分区视图”。为了允许视图可更新,每个表都需要对其主键进行检查约束,定义允许的值范围 - 例如: create table t1 (id Int constraint t1chk check (id < 10) primary key, other columns);

请参阅工作示例 
Fiddle

此处。

© www.soinside.com 2019 - 2024. All rights reserved.