Db2

從具有與 Table1 相同結構的表中載入數據,唯一的區別是 ID 非空列?

  • September 21, 2020

所以,我知道如果你想將數據載入到與資料結構不同的表中,那麼你必須以逐列的方式進行,在這種情況下,我有很多表與 table2 的唯一不同之處在於創建了一個 indentity 列。所以我的問題是,有沒有一種方法可以載入數據db2 INSERT INTO table2 SELECT * FROM table1但跳過此標識列?以某種方式在我可以告訴數據庫的語法中?逐列語法執行此操作將花費大量時間。

您可以製作身份列IMPLICITLY HIDDEN

CREATE TABLE T(I INT NOT NULL GENERATED BY DEFAULT AS IDENTITY, A INT)

ALTER TABLE T ALTER COLUMN I SET IMPLICITLY HIDDEN

INSERT INTO T VALUES (42)

SELECT I, A FROM T 

將輸出

I|A     
-|------
1|    42

如果源表和目標表沒有完全相同的列,以相同的順序創建,則無法避免指定要在何處插入哪些列,以一種或另一種方式。

您可以在insert語句中指定它們,但不包括標識列:

insert into target (col1, col2) select * from source

或者,如果您定期執行此類插入,您可以通過定義一次基於目標表的視圖來省去一些未來的麻煩:

create view v_target as select col1, col2 from target;
insert into v_target select * from source;

小提琴連結

引用自:https://dba.stackexchange.com/questions/275732