2013-03-04 66 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是不可能的(种类..)

相关问题