我很紧张地触发了这个查询,因为我没有那么多地使用子查询。我想确保这个野兽按照我的计划做我想做的事。
DoCmd.RunSQL ("UPDATE Gage_Master SET Gage_Master.Est_Calibration_Cost = SELECT dbo_Gage_Master.Est_Calibration_Cost FROM dbo_Gage_Master WHERE dbo_Gage_Master.Est_Calibration_Cost <> Gage_Master.Est_Calibration_Cost WHERE Gage_Master.Gage_ID = dbo_Gage_Master.Gage_ID;")
基本上 - 这只小狗会更新Gage_Master表中的估计校准成本(使用同名的表链接到另一个程序的MDB数据存储区),并将Gage_Master表(dbo_Gage_Master)的SQL-Server存储副本中的值更新为只要他们不平等?
很抱歉,如果这是一个已经被问到的问题 - 就像我说的那样,这是一件非常复杂的事情,我想做的最后一件事就是在我的生产数据库中清空我的价格,因为我写错了。在此先感谢您的帮助!
答案 0 :(得分:1)
不,它甚至不会运行。它是不正确形成的SQL(你有两个在哪里,第二个应该是“和”,你的更新完全不正确,你正在寻找更新)
http://msdn.microsoft.com/en-us/library/ms177523.aspx
非常简单的更新可能如下所示:
UPDATE MyTable
SET MyTable.MyColumn = B.MyOtherColumn
FROM MyOtherTable as B WHERE MyTable.ID = B.ID
这是一个额外的SO帖子,处理这个问题,回答者更深入地了解我在这里。
答案 1 :(得分:1)
以这种方式尝试:
UPDATE gm
SET Est_Calibration_Cost = dgm.Est_Calibration_Cost
FROM Gage_Master gm
INNER JOIN dbo_Gage_Master dgm
ON gm.Gage_ID = dgm.Gage_ID
WHERE gm.Est_Calibration_Cost <> dgm.Est_Calibration_Cost
答案 2 :(得分:1)
我假设你正试图在Access中运行它。这将解释您在评论中提到的“缺少运算符”错误 - 访问不理解UPDATE...FROM...
。试试这个:
UPDATE dbo_Gage_Master AS dgm INNER JOIN
Gage_Master AS gm ON dgm.Gage_ID = gm.Gage_ID
SET gm.Est_Calibration_Cost = dgm.Est_Calibration_Cost
WHERE gm.Est_Calibration_Cost <> dgm.Est_Calibration_Cost;
是的,看起来你可能会以错误的方式更新,因为dgm
在联接中排在第一位(它只是按照这种方式计算出来的......)。这是不的情况,因为它是确定实际完成更新的SET
子句。
答案 3 :(得分:0)
试试这个。在你运行它之前做一个数据库备份或表副本!
UPDATE Gage_Master
SET Gage_Master.Est_Calibration_Cost = dbo_Gage_Master.Est_Calibration_Cost
FROM dbo_Gage_Master
inner join Gage_Master
on (Gage_Master.Gage_ID = dbo_Gage_Master.Gage_ID)
WHERE dbo_Gage_Master.Est_Calibration_Cost <> Gage_Master.Est_Calibration_Cost;
如何制作Gage_Master表副本:
select * into Gage_Master_copy from Gage_Master