代码之家  ›  专栏  ›  技术社区  ›  B.I.

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

  •  0
  • B.I.  · 技术社区  · 2 年前

    我有两个简单的表(没有约束、一个主键、没有触发器等)托管在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命令阻止了编辑。

    有什么方法可以使这样的视图可编辑吗?我可以用不同的方式构造它吗?这样派生/常量错误就不会阻止编辑?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Stu    2 年前

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

    您需要的概念被称为 分割视图 。为了允许视图可更新,每个表都需要对其主键进行检查约束,以定义允许的值范围,例如:

    create table t1 (id Int constraint t1chk check (id < 10)  primary key, other columns);
    

    参见工作示例 Fiddle 在这里