我注意到有关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_no
的{{1}}更新,但是针对所有99998
进行更新(在我们的情况下仅为{{1} }和fund_no
)我认为是因为我的状态在表99998
中。也许我必须将其更改为其他地方?在这种情况下,我有权更改状态并将其移动到任何地方。
我认为这是由于尝试通过View更新一个表,但在不同的表中使用两个不同的列而引起的。
这里也是我拥有的所有表的构造函数:
我还考虑了在我的更新代码中使用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代码来使此更新有效,我将不胜感激。