0

3 つのテーブルがあり、そのうちの 2 つは一時テーブルです。一方には更新する古い値があり、もう一方には新しい値があります。

最初のテーブルには と の列が含まれTelephoneID他の 2 つのテーブルには 1 つの列のみが含まれます。telephones

TelephonesOrganization:

ID        Telephone 
1          1234
1          4567
1          5678

TelephonesToUpdate:

Telephone
1234
4567

TelephonesNewValues:

9999
9999

で更新する値はTelephonesToUpdate、 の同じ行に直接対応しますTelephonesNewValues。たとえば、1234 は値 9999 を取り、ID も変数です。この場合は 1 です。

UPDATEWhere で and を使用して、 と id を比較しようとしましたTelephonesが、何らかの理由でエントリが重複しています。

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 で ID を作成できます: 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 テーブルの列だと思いました。また、exists 句にエラーがありました。

于 2013-05-16T17:26:03.573 に答える