0

我有 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 中使用 and 比较 theTelephones和 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 

提前感谢您的任何回答,

但丁。

4

2 回答 2

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 Fiddle:http ://sqlfiddle.com/#!3/3c15d/3

于 2013-05-16T18:01:15.430 回答
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 表的一列。我的存在子句也有错误。

于 2013-05-16T17:26:03.573 回答