0

XMLリーダーから入力された一時テーブルがあり、サイトの最終的な本番テーブルに置き換えられます。現在、列は一致していますが、一時テーブルから更新するときにオーバーライドされず、手動で更新される列を運用テーブルに追加したいと考えています。

例: 一時テーブルには列があります:

Name
Address
Phone

生産表には次のものがあります。

Name 
Address 
Phone
Date

現在私は使用しています:

REPLACE INTO Tdata select * from temp_Tdata;

現在の日付列を変更せずに一時テーブルからデータを取得するにはどうすればよいですか。テーブルには 25 を超える列があるため、可能であればすべての列名をリストする必要はありません。

ご協力いただきありがとうございます。

アップデート

REPLACE INTO Tdata (Name, Address, Phone) select (Name, Address, Phone) from temp_Tdata;

日付列がデフォルトにリセットされ、手動で行った変更が失われるため、機能しません。

4

3 に答える 3

1
UPDATE Tdata
SET Name = temp_TData.Name,
Address = temp_Tdata.Address,
Phone = temp_TData.Phone
WHERE Tdata.Name = temp_Tdata.Name
于 2013-03-06T21:28:26.187 に答える
1

更新の回避策REPLACE

REPLACE INTO Tdata (Name, Address, Phone, Date)
SELECT tt.Name, tt.Address, tt.Phone, t.Date
  FROM temp_Tdata tt LEFT JOIN 
       Tdata t ON tt.Name = t.Name;

sqlfiddle

日付列を一時データに表示するビューを作成できるようになりました

CREATE VIEW vw_temp_Tdata
AS
SELECT tt.Name, tt.Address, tt.Phone, t.Date
  FROM temp_Tdata tt LEFT JOIN 
       Tdata t ON tt.Name = t.Name;

そして、このように使用します

REPLACE INTO Tdata 
 SELECT * FROM vw_temp_Tdata;

sqlfiddle

では機能しないため、元の回答は削除されましたREPLACE

于 2013-03-06T21:26:49.153 に答える
0

私の理解が正しければ、次のことを行う必要があります。

  1. 宛先テーブルに列を追加する
  2. 元のテーブル (目的のテーブルよりも多くの列がある) のデータを目的のテーブル挿入します。

その場合は、更新する前に宛先テーブルを変更する必要があります。

ALTER TABLE Tdata
    ADD COLUMN newColumn Varchar(50); -- Just an example

その後、データを更新 (または挿入) できます。

于 2013-03-06T21:29:20.677 に答える