首页 > 解决方案 > 如何在有或没有加入的情况下更新视图?

问题描述

我注意到有关 MS SQL 命令的问题。该公司的数据库有一个基于 5 个表的视图。这是的结构/代码email_view_test

create view [dbo].[email_view_test]
as
SELECT
    fi.fund_no,
    kw.key_no,
    kw.key_title,
    f.fac_id,
    f.email,
    fi.agency_no,
    fi.cfda_no,
    fi.cont_url,
    fi.cont_url2,
    fi.due_date,
    fi.due_note,
    fi.entry_dt,
    fi.fundtext,
    fi.prog_title,
    fi.sponcode,
    fi.sect,
    fak.Status
FROM
    dbo.ff_fundinfo fi
left join ff_fundkey fk on fk.fund_no=fi.fund_no
left join ff_keyword kw on kw.key_no=fk.key_no
left join ff_fackey fak on fak.key_no=kw.key_no
left join  ff_faculty f on f.fac_id=fak.fac_id

where due_date>getdate()
GO

我试图通过以下代码将状态更新为“已发送”:

UPDATE email_view_test 
SET Status = 'sent'  where email= 'lilirasouliha@gmail.com' and fund_no= '99998' 

但由于某种原因,fund_no在更新中不起作用(它只是被忽略了)

代码:

select top 10 * from ff_fackey where status='sent' order by key_no

select top 10 fund_no,key_no,fac_id,status from email_view_test 
where status='sent' order by fund_no

结果截图:

在此处输入图像描述

如您所见,问题出现在这里,我希望仅更新状态fund_no99998但更新所有fund_no(在我们的情况下仅9999899999)我认为问题是因为我在 Table 中具有状态ff_fackey。也许我必须将其更改为其他地方?如果是这种情况,我有权更改状态并将其移动到任何地方。

我认为这是因为我试图通过 View 更新一个表,但我在不同的表中使用了两个不同的列。

这也是我拥有的所有表的构造函数:

在此处输入图像描述


在此处输入图像描述


在此处输入图像描述


在此处输入图像描述


在此处输入图像描述

我还考虑了在我的更新代码中使用 join 的解决方案,但它不起作用并给出错误:(如果是这种情况,如果可以修复此代码,我将不胜感激)

UPDATE email_view_test v inner join ff_fundinfo f on v.fund_no=f.fund_no
SET v.Status = 'sent'  where v.email= 'lilirasouliha@gmail.com' and v.fund_no= '99998' ;

上面代码的更新:我注意到上面代码问题的语法,代码应该如下所示(但它仍然忽略fund_no更新它)

UPDATE email_view_test 
SET Status = 'sent'   
from email_view_test join ff_fundinfo on email_view_test.fund_no=ff_fundinfo.fund_no
where email_view_test.fund_no= '99998' and email= 'lilirasouliha@gmail.com'

更新2:我认为问题在于我的观点是检索包括状态在内的数据的方式,我认为我应该以另一种方式检索数据,但不确定如何编写一个只检索正确的 fak.status 的 SQL 命令。

我将不胜感激任何帮助,建议使此更新与操纵状态在可能的表中的位置或更改更新 SQL 代码一起工作。

标签: sqlsql-servertsqlsql-updatesql-view

解决方案


推荐阅读