Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
视图基表中的SQL更新行_Sql_Sql Server_View - Fatal编程技术网

视图基表中的SQL更新行

视图基表中的SQL更新行,sql,sql-server,view,Sql,Sql Server,View,我有一个视图,它在SQLServer中的两个表之间进行联合。我正在使用一个INSTEADOFUPDATE触发器来更新基表。我编写这段代码是为了更新基表中特定行的Column1,但我得到一个错误: IF UPDATE(Column1) BEGIN UPDATE BaseTable SET Column1 = I.Column1 FROM inserted I INNER JOIN (SELECT * FROM Table1 UNION ALL

我有一个视图,它在SQLServer中的两个表之间进行联合。我正在使用一个INSTEADOFUPDATE触发器来更新基表。我编写这段代码是为了更新基表中特定行的Column1,但我得到一个错误:

IF UPDATE(Column1)
    BEGIN
        UPDATE BaseTable
        SET Column1 = I.Column1
        FROM inserted I INNER JOIN (SELECT * FROM Table1 UNION ALL SELECT * FROM Table2) AS BaseTable
        ON I.UniqueID = BaseTable.UniqueID
        WHERE BaseTable.UniqueID = I.UniqueID

    END

ERROR: Derived table 'Base' is not updatable because a column of the derived table is derived or constant.

错误信息实际上非常清楚。视图/子查询/CTE可更新的要求之一是,每一列都可以与单个表中的单个列相匹配。这就是错误消息试图告诉您的内容

您必须分别更新这些表:

UPDATE t1
    SET Column1 = I.Column1
    FROM inserted I INNER JOIN
         Table1 t1
         ON I.UniqueID = t1.UniqueID;

UPDATE t2
    SET Column1 = I.Column1
    FROM inserted I INNER JOIN
         Table2 t2
         ON I.UniqueID = t2.UniqueID;

SQL Server只允许
UPDATE
语句更新一个表。

在这两个表之间是唯一的
UniqueID
。不仅仅是“现在对于当前数据是唯一的”,而且保证是唯一的?如果它们是标识列,则表示您选择了疯狂的路径。这些是生成的唯一字符串,在整个数据库中都是唯一的。您可能希望了解在我的情况下,我不需要更新两个表,而是根据哪个表包含具有指定唯一ID的行来更新其中一个表。我需要在两个表中的一个表中找到UniqueID列与更新行的UniqueID列相同的行。在找到更新的行来自哪个表之后,更新只需要对该表运行一次。有什么简单的方法吗?@AwiringCameron。那又怎么样?(1) 仅更新具有匹配ID的行;如果没有与特定表匹配的行,则不会更新该表中的任何行。(2)
inserted
可以包含多行,因此它可能在两个表中都有行。我不知道您的解决方案可以完成所有这些事情。在我看来,两个表中的行是否匹配都会得到更新。谢谢你的帮助,我是SQL新手…很明显!