Sql server 更新w/选择子查询-正确吗?

Sql server 更新w/选择子查询-正确吗?,sql-server,ms-access,vba,Sql Server,Ms Access,Vba,我很紧张要触发这个查询,因为我没有太多地使用子查询。我想确保这只野兽在我的计划中做我想要它做的事情 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_Maste

我很紧张要触发这个查询,因为我没有太多地使用子查询。我想确保这只野兽在我的计划中做我想要它做的事情

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;")
DoCmd.RunSQL(“更新量规\主设置量规\主设置量规\主设置量规\校准\成本=从dbo\量规\主设置量规\校准\成本中选择dbo\量规\主设置量规\校准\成本,其中量规\主设置量规\ ID=dbo\量规\主设置量规\校准\成本”)
基本上-只要不相等,这只小狗会用SQL Server存储的Gage_主表副本(dbo_Gage_Master)中的值来更新Gage_主表(链接到另一个程序的MDB数据存储,具有相同名称的表)中的估计校准成本吗


抱歉,如果这是一个已经被问过的问题,就像我说的,这是一件非常复杂的事情,我最不想做的就是在我的生产数据库中清空我的价格,因为我写了一些错误的东西。提前感谢您的帮助

不,它甚至不会运行。它是格式不正确的SQL(您有两个where,第二个where应该是“And”,并且您的更新完全不正确,您正在从中查找更新)

非常简单的更新可能如下所示:

UPDATE MyTable
SET MyTable.MyColumn = B.MyOtherColumn
FROM MyOtherTable as B WHERE MyTable.ID = B.ID
这里有一个额外的SO帖子,处理这个问题,回答者比我在这里更深入

试着这样做:

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 
更新gm
设置Est_校准成本=dgm.Est_校准成本
来自盖奇大学总经理
内连接dbo_量规_主dgm
在gm.Gage_ID上=dgm.Gage_ID
其中gm.Est_校准成本dgm.Est_校准成本

试试这个。在运行它之前,请先进行数据库备份或表复制

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;

我假设你想在Access中运行这个。这可以解释您在注释中提到的“缺少运算符”错误——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; 
将dbo_Gage_Master更新为dgm内部联接
dgm上作为gm的量规主控。量规ID=gm.量规ID
设置gm.Est_校准成本=dgm.Est_校准成本
其中gm.Est_校准成本dgm.Est_校准成本;

是的,看起来你更新的方式可能不对,因为
dgm
在连接中是第一位的(它就是这样工作的…)。这是而不是情况,因为是
SET
子句决定了实际完成的更新。

您正在测试环境中工作,对吗?我希望不要在实时生产服务器上学习SQL语法……是的,最坏的情况是——这会在我经常运行过的数据库中造成空白定价——所以这只意味着我以后必须重新填充它。无论如何,我都会打电话给供应商,所以这基本上是一件“很好拥有”的事情。你永远不应该使用DoCmd.RunSQL。我已经编写了一个名为SQLRun()的访问函数来替换它,我在很多地方(谷歌我的名字和函数名)都发布了它,这是一个更好的选择,因为它没有DoCmd.RunSQL.OP忽略子查询周围的parens的无数问题——它将正确地用它们形成。不过我还是不认为它会在Access中运行。这个!看,我不知道更新从没有工作与Microsoft Access,这是完美的工作。
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;