2013-03-04 33 views
1

我想準備一個LOAD實用程序來將數據加載到DB2表中。該表具有包含GENERATEDALWAYS功能集的列。在DB2中使用IMPORT而不是LOAD

因此,我無法從表中加載卸載的細節。

是否有可能對具有GENERATEDALWAYS的列設置的表使用導入?

步驟我做:

1. db2 "export to tbl.txt of del modified by coldel| select * from <schema.table> where col=value" 
2. db2 "delete from <schema.table> where col=value" 
3. db2 "import from tbl.txt of del modified by coldel| allow write access warningcount1 insert into <schema.table>" 

列有 「GENERATEDALWAYS」 被導入後有新的價值。是否有可能使用導入來填充GENERATEDALWAYS列以獲得舊值?

感謝您的幫助。

感謝, 馬修禮居

回答

0

你所問的是不可能的。使用IMPORT,您無法覆蓋具有GENERATED ALWAYS的列。正如@Peter Miehle建議您可以更改表格以指定該列爲GENERATED BY DEFAULT,但這可能會破壞其他應用程序。

您的問題的標題暗示您不想使用LOAD實用程序(但您在實際問題中沒有提及它)。然而,LOAD是將數據寫入到表並保持所產生的列值的唯一途徑,因爲他們在文件中存在:

db2 "load from tbl.txt of del modified by generatedoverride insert into schema.table" 

如果你這樣做,請注意:

  • DB2不檢查表中是否存在與現有行的衝突。您需要在有問題的列上定義唯一索引來解決此問題;這會導致DB2刪除剛剛在加載的DELETE階段加載的行。

  • 如果您的生成列正在使用IDENTITY,請確保您更改該列以確保將來生成的值不會與剛剛插入到表中的行發生衝突。

0

也許你可以從列去掉「代」,並再次用適當的值導入後添加。

0

@伊比約霍夫給你的選擇。

IMPORT實際上是在後臺插入INSERT - 即它首先準備一個帶有參數標記的INSERT語句,並使用這些標記的輸入文件中的值。

在您的SQL快照中,您將看到使用的INSERT語句。

任何不可能在INSERT語句中使用IMPORT是不可能的(種類..)

相關問題