2017-03-15 66 views
0

我在我的SP中有一个临时表和我的数据库中有一个表,我需要更新数据库中的表,并且现在我可以更新表使用select语句。使用临时表更新一个表,使用select语句多行

但我在临时表中有多个记录,我只能更新数据库中表的最后一行。

下面是我遇到的查询,

UPDATE 
Table_A 
SET 
    Table_A.col2 = Table_B.col2, 
    Table_A.col3 = Table_B.col3 
FROM 
    Some_Table AS Table_A 
    INNER JOIN temp_Table AS Table_B ON Table_A.col1 = Table_B.col1 

和DB表结构

col1 | col2  | col3 

1 | India  | Delhi 
2 | US   | NewYork 
3 | UK   | London 

和TEMP表结构如下

col1 | col2  | col3 

1 | US   | NewYork 
2 | UK   | London 
3 | India  | Delhi 

所以,我需要更新我的表为多行。

+2

如果你加入的话,你为什么要更新'col1'?他们已经是平等的。 – SqlZim

+0

也许是where子句?这两个表都不是临时表BTW。 – scsimon

+0

@SqlZim我有我的更新我的问题,请现在检查 – best

回答

0

据我了解你的文章,我认为这应该是解决方案,将正确更新。希望这可以帮助

WITH CTE1 
       AS (SELECT Col1 , 
          Col2 , 
          ROW_NUMBER() OVER (PARTITION BY COl1 ORDER BY Col2) AS rn 
        FROM  table_1 t1 
       ), 
      CTE2 
       AS (SELECT Col1 , 
          Col2 , 
          ROW_NUMBER() OVER (PARTITION BY COl1 ORDER BY Col2) AS rn 
        FROM  table_2 t2 
       ) 
     UPDATE br 
     SET .... 
     FROM Cte1 c1 
       INNER JOIN cte2 c2 br ON c1.Col1 = c2.Col1 
                AND c1.rn = c2.rn;