更新SQL Server两个语句

时间:2016-08-15 12:32:37

标签: sql sql-server sql-server-2008 sql-update

UPDATE ADDRESS 
SET ADDRESS.LATITUDE = b.latitude,
    ADDRESS.LONGITUDE= b.LONGITUDE
FROM POSTAL_CODE_LOOKUP b
WHERE ADDRESS.postal_cd = b.POSTALCODE
  AND (address.LATITUDE != b.LATITUDE OR address.LONGITUDE !=b.LONGITUDE)

 11:20:23  [BEGIN - 2454 row(s), 0.437 secs]  Command processed
 11:20:23  [BEGIN - 2454 row(s), 0.437 secs]  Command processed
... 2 statement(s) executed, 4908 row(s) affected, exec/fetch time: 0.874/0.000 sec  [2 successful, 0 warnings, 0 errors]

执行更新后,我运行下面的SQL并获得2454条记录。

select 
    a1.POSTAL_CD, b.POSTALCODE, 
    a1.LATITUDE, b.LATITUDE, 
    a1.LONGITUDE, b.LONGITUDE
from
    ADDRESS a1, POSTAL_CODE_LOOKUP b
where 
    a1.postal_cd = b.postalcode
    and (a1.LATITUDE != b.LATITUDE or a1.LONGITUDE != b.LONGITUDE);

是的,我已经承诺了,记录没有改变。我不明白为什么更新被读作2个语句。我不明白为什么它没有更新。

我该如何撰写此更新声明?

3 个答案:

答案 0 :(得分:0)

您的ADDRESS表必须具有更新触发器,这就是为什么存在关于2454行的第二个语句的原因。

更新的数量仅为2454行,与您选择的数字相同。

答案 1 :(得分:0)

我认为

您的联接中有多行代表一个邮政编码

答案 2 :(得分:0)

使用以下脚本更新地址表。

UPDATE a 
SET    a.LATITUDE = b.latitude,
       a.LONGITUDE= b.LONGITUDE
FROM [ADDRESS] a
 JOIN POSTAL_CODE_LOOKUP b
        ON a.postal_cd = b.POSTALCODE
WHERE (a.LATITUDE != b.LATITUDE or a.LONGITUDE !=b.LONGITUDE)