Sql 视图或函数'';不可更新,因为修改会影响多个基表

Sql 视图或函数'';不可更新,因为修改会影响多个基表,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在尝试创建一个sql脚本,它应该检查一行是否存在。如果一个不存在,我想创建一个,如果一个存在,我想更新它 但是,在我下面的代码中,插入行抛出以下错误: 视图或函数“”不可更新,因为修改会影响多个基表 有没有办法找出这会影响哪些其他基表以及如何实现我的目标 SQL代码: IF NOT EXISTS (SELECT * FROM g4b_stockcountsummary WHERE g4b_stockcountid = @scid AND g4b_protopr

我正在尝试创建一个sql脚本,它应该检查一行是否存在。如果一个不存在,我想创建一个,如果一个存在,我想更新它

但是,在我下面的代码中,插入行抛出以下错误:

视图或函数“”不可更新,因为修改会影响多个基表

有没有办法找出这会影响哪些其他基表以及如何实现我的目标

SQL代码:

IF NOT EXISTS (SELECT * FROM g4b_stockcountsummary 
               WHERE g4b_stockcountid = @scid AND g4b_protoproductid = @ppid)
BEGIN
    --stock count data doesn't exist for the given product/stock count, create new record
    SET @difference = @count - @expectedtotal

    INSERT INTO g4b_stockcountsummary (g4b_stockcountsummaryid, g4b_stockcountid, g4b_protoproductid, g4b_expectedtotal, g4b_counttotal, g4b_difference)
    VALUES (NEWID(), @scid, @ppid, @expectedtotal, @count, @difference)
END
ELSE
BEGIN
    --stock count data already exists for the given product/stock count, update record
    DECLARE @originalcount INT

    SET @originalcount = (SELECT g4b_counttotal FROM g4b_stockcountsummary 
                          WHERE g4b_stockcountid = @scid AND g4b_protoproductid = @ppid)
    SET @count = @originalcount + @count
    SET @difference = @count - @expectedtotal

    UPDATE g4b_stockcountsummary
    SET g4b_expectedtotal = @expectedtotal, 
        g4b_counttotal = @count, 
        g4b_difference = @difference
    WHERE g4b_stockcountid = @scid 
      AND g4b_protoproductid = @ppid
END

g4b_stockcountsummary
是一个视图。视图可以更新,但只能在某些条件下更新。这些内容列在中,并从以下内容开始:

可更新视图

可以通过视图修改基础基表的数据,如下所示: 只要以下条件成立:

  • 任何修改,包括
    UPDATE
    INSERT
    DELETE
    语句,都必须只引用一个基表中的列
因此,你不能做你想做的事。您需要修复视图或独立更新每个基表


我应该指出,这是正确的。您可以在视图上使用
而不是
触发器来支持
更新
。文档引用的是视图上的基本更新。

g4b\u stockcountsummary
是一个视图。请编辑您的问题并显示视图。您可以尝试使用而不是触发器为基表编写自定义更新。。更多信息我可以证明@LukaszSzozda所说的,并且需要感谢他提到您实际上可以定义视图触发器(我们生活在一个奇妙的时代!)。就这么做了,这正是医生在我们的病例中要求的。