如何更新包含旧值和SQL Server中的新值的其他2个表?

时间:2013-05-16 16:45:39

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

我有3个表,其中2个是临时表。一个具有要更新的旧值,另一个具有新值。

第一个表格包含TelephoneID列,其他两个只包含一列,telephones

实施例

TelephonesOrganization

ID        Telephone 
1          1234
1          4567
1          5678

TelephonesToUpdate

Telephone
1234
4567

TelephonesNewValues

9999
9999

TelephonesToUpdate中要更新的值直接对应TelephonesNewValues中的同一行,例如1234将取值9999,ID也是变量,在这种情况下为1。

我已尝试使用和UPDATE并在Where比较Telephones和id但由于某种原因我得到重复的条目。

Declare @ID int 
Set @ID = 1
UPDATE A
SET A.Telephone = 12345  FROM TelephoneOrg A, @TempOLDTelephones B , @TempNEWTelephones C
WHERE A.Telephone = B.Telephone and A.ID = @ID 

提前感谢您的回答,

但丁。

2 个答案:

答案 0 :(得分:1)

我相信您在TelephonesToUpdate和TelephonesNewValues之间没有ID,但顺序是相同的,所以我们可以使用ROW_NUMBER创建一个:http://msdn.microsoft.com/en-us/library/ms186734(v=sql.100).aspx

UPDATE t
  SET t.Telephone = b.Telephone
FROM TelephonesOrganization AS t
INNER JOIN
(
  SELECT 
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS 'ID'
   ,Telephone
   FROM TelephonesToUpdate
) AS a
  ON t.Telephone = a.Telephone
INNER JOIN
(
  SELECT 
    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS 'ID'
   ,Telephone
   FROM TelephonesNewValues
) AS b
  ON a.ID = b.ID
;

以下是您可以使用的SQL小提琴:http://sqlfiddle.com/#!3/3c15d/3

答案 1 :(得分:0)

update TelephonesOrganization o
   set o.Telephone = ( select u.TelephonesNewValues
                         from TelephonesToUpdate u
                        where u.Telephone = o.Telephone )
 where o.ID = 1
   and exists ( select u.TelephonesNewValues
                  from TelephonesToUpdate u
                 where u.Telephone = o.Telephone );

更新:我在问题更新之前回答了这个问题。我不认为TelephoneNewValues是一张桌子。我以为它是TelephoneToUpdate表的一列。我的exists子句中也有错误。