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

Bha*_*hav 5 sql t-sql sql-server

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

但是,在我的下面的代码中,INSERT行会引发以下错误:

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

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

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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

g4b_stockcountsummary是一种观点.视图可以更新,但仅限于某些条件.这些列在文档中,它们开始:

可更新的视图

只要满足以下条件,您就可以通过视图修改基础基表的数据:

  • 任何修改(包括UPDATE,INSERT和DELETE语句)都必须仅引用一个基表中的列.

因此,你无法做你想做的事.您需要修复视图或单独更新每个基表.

我应该指出lad2025是正确的.您可以instead of在视图上使用触发器来支持update.该文档指的是视图的基本更新.