我有一个带有更新查询的Access应用程序,其语法如下:
UPDATE TABLE1, TABLE2 SET
TABLE2.VALUE1 = TABLE1.VALUE1,
TABLE2.VALUE2 = TABLE1.VALUE2,
TABLE2.VALUE3 = TABLE1.VALUE3,
TABLE2.VALUE4 = TABLE1.VALUE4
查询正在运行,但我不明白这里发生了什么。 我正在尝试将此查询转换为SQL Server。 有人可以解释这个查询的作用吗?我的猜测是它是一种特殊的Access语法。
谢谢, 斯文
答案 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语句(带子查询)。