MS Access 2003中的奇怪UPDATE语法

时间:2010-12-21 15:46:09

标签: sql ms-access vba

我有一个带有更新查询的Access应用程序,其语法如下:

UPDATE TABLE1, TABLE2 SET 
TABLE2.VALUE1 = TABLE1.VALUE1, 
TABLE2.VALUE2 = TABLE1.VALUE2, 
TABLE2.VALUE3 = TABLE1.VALUE3, 
TABLE2.VALUE4 = TABLE1.VALUE4

查询正在运行,但我不明白这里发生了什么。 我正在尝试将此查询转换为SQL Server。 有人可以解释这个查询的作用吗?我的猜测是它是一种特殊的Access语法。

谢谢, 斯文

3 个答案:

答案 0 :(得分:5)

它使用较旧的隐式JOIN语法,尽管SQL Server也应该理解该语法。

它是INNER JOINing table1和table2,然后将值从table1移动到table2。由于缺少JOIN条件,如果table1有超过1行,则可能会产生不可预测的结果。

基本上是:

 UPDATE Table1 INNER JOIN Table2 <<ON Missing Conditions Here>>
   SET Table2.Value1 = Table1.Value1
       Table2.Value2 = Table1.Value2
       Table2.Value3 = Table1.Value3
       Table2.Value4 = Table1.Value4

您可以使用以下内容将其转换为SQL Server:

 UPDATE Table2
   SET Table2.Value1 = Table1.Value1
       Table2.Value2 = Table1.Value2
       Table2.Value3 = Table1.Value3
       Table2.Value4 = Table1.Value4
   FROM Table1 INNER JOIN Table2 <<ON Missing Conditions Here>>

答案 1 :(得分:0)

TABLE2中的每个字段都将覆盖TABLE1中的对应字段,逐个记录来自TABLE1的记录。结果将是TABLE2,其中所有替换的记录都来自TABLE1的最后一行。如果TABLE1没有记录 - 则不会发生任何更改。 对不起我的英语不好。 而且......它是SQL。

答案 2 :(得分:0)

尽量避免在SQL Server中使用“UPDATE with join”语法。它是完全非标准的SQL,但更严重的是,如果加入条件不正确,它会给出不可预测的结果,而不会出现任何错误或警告。如果可以,请使用MERGE语句或使用标准版本的UPDATE语句(带子查询)。