如何在有或没有联接的情况下更新视图?

时间:2019-08-16 20:53:08

标签: sql sql-server tsql sql-update sql-view

我注意到有关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

结果截图:

enter image description here

问题如您所见出现在这里,我希望状态仅针对fund_no的{​​{1}}更新,但是针对所有99998进行更新(在我们的情况下仅为{{1} }和fund_no)我认为是因为我的状态在表99998中。也许我必须将其更改为其他地方?在这种情况下,我有权更改状态并将其移动到任何地方。

我认为这是由于尝试通过View更新一个表,但在不同的表中使用两个不同的列而引起的。

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

enter image description here


enter image description here


enter image description here


enter image description here


enter image description here

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

99999

以上代码的更新: 我注意到上述代码问题的语法,该代码应如下所示(但它仍然忽略ff_fackey来对其进行更新)

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' ;

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

如果能通过处理may表中的Status位置或更改更新SQL代码来使此更新有效,我将不胜感激。

0 个答案:

没有答案