更新查询以通过循环运行以更新许多行

GPH*_*GPH 1 sql-server-2008 sql-update

我在处理SQL时很少使用update语句,这样做时会有点紧张.在之前的一期中,我提出了它,我决定在一些表中添加一个标识列作为代理键.考虑到170万行,我希望尽可能顺利地完成这项工作.所以我需要做的是运行一个循环更新并使用相关数据更新每个字段.

表1:tblPostCodeLookup

Postcode | Postcode ID
AB44     | 1
AB45     | 2
Run Code Online (Sandbox Code Playgroud)

表2:tblPostcodeStreetView

ID | Postcode | Postcode ID
1  | AB446TR  | 1
2  | AB447TY  | 1
3  | AB457HH  | 2
Run Code Online (Sandbox Code Playgroud)

我已经做了基本的更新

UPDATE    tblPostcodesStreetsView
SET              PostcodeID = 1
WHERE     (postcode LIKE 'AB44%')
Run Code Online (Sandbox Code Playgroud)

然而,让这个贯穿并更新每一个导致我的问题!

Dam*_*ver 6

UPDATE  psv
SET              PostcodeID = pcl.PostcodeID
FROM    tblPostcodesStreetsView psv
         INNER JOIN
        tblPostCodeLookup pcl
          on
            pcv.postcode LIKE pcl.postcode + '%'
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.除非有多行与tblPostCodeLookup其中的相同行匹配tblPostcodesStreetsView- 在这种情况下,PostCodeID分配的行没有很好地定义.

UPDATE...FROM是SQL Server方言,它不是标准SQL.标准方法将类似于:

UPDATE  tblPostcodesStreetsView
SET     PostcodeID = (select pcl.PostcodeID from tblPostCodeLookup pcl
                 where tblPostcodesStreetsView.postcode LIKE pcl.postcode + '%')
Run Code Online (Sandbox Code Playgroud)

对于我提到的多个匹配的上述场景,这至少会产生错误.