DrJokepu解決方案是好的,但這取決於你在你的問題中所稱的「變更」,是固定的。 I.e .:你是否總是爲第二列改變+1?還是那些變化是「動態的」,你必須決定運行哪種變更來應用?
在DB2和其他SQL中有不同的結構(如插入到DB2中)或SELECT INTO for MS-SQL,它們將允許您構建一組查詢。
如果我沒有記錯的話,你想這樣做:
- 插入一些值到一個表,來自選擇(你所說的「老」)
- 創建另一組的記錄(像「老」),但修改它們的值。
或者,也許你只想做號碼2
1號很容易,博士Jokepu已經表現出你:
INSERT INTO <table> (values) SELECT "values" FROM <anotherTable>;
2號,你總是可以做同樣的查詢,添加變更爲您選擇:
INSERT INTO MDSTD.MBANK (MID, MAGN, MAAID, MTYPEOT, MAVAILS, MUSER, MTS)
SELECT
MID
,MAGN + 1
,0 as MAAID
,MTYPEOT
,'A' as MAVAILS
,MUSER
,GETDATE()
FROM mdstd.mbank
WHERE MTYPEOT = '2' and MAVAILS = 'A'
(注意GETDATE()是一個MS-SQL的功能,我不記得現在DB/2的確切功能)。
還有一個問題,在你的榜樣,你提到的:
「新= A舊= O」
如果舊變爲「O」,那麼你真的想改變原始行?這個問題的答案取決於你想要完成的確切任務,但對我而言仍然不清楚。
如果您想複製行並更改「副本」或複製它們並更改兩個集(舊的和新的)但使用不同的規則。
UPDATE 重讀你的文章,我知道後,你想這樣做:
- 複製的一組記錄(有效複製它們),但修改它們的值。
- 之前修改原始的記錄集你複製他們
如果是這樣的話,我不認爲你可以做到這一點在「兩節」查詢,因爲你沒有辦法知道舊行是什麼,如果你已經複製了新行,新行是什麼。
一個有效的選擇是創建一個臨時表,將其中的行復制(使用我提供的查詢將它們修改爲「新的」),然後在原始表中執行「更新」(使用相同的在哪裏確保你正在修改相同的行),更新任何你想要更新的「舊」值,最後將新的值插回到已經修改的原始表(我們稱之爲「新」)中。 最後,刪除臨時表。
唷!
聽起來不可思議,但除非我們談論的每分鐘記錄不計其數,這應該是一種快速的操作的。
你能解釋一下你的想法嗎?一點樣本會有幫助。您可以使用SELECT INTO(並根據需要塑造select/into),但如果需要修改「原始」表,則需要DB2中的存儲過程。 – 2009-09-11 10:58:06