在DB2中使用IMPORT而不是LOAD

时间:2013-03-04 11:11:13

标签: import load db2

我想准备一个load实用程序来将数据加载到DB2表中。该表包含包含GENERATEDALWAYS功能集的列。

所以,我无法从表中加载卸载的详细信息。

是否可以对具有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”的列具有新值。是否可以使用import来填充GENERATEDALWAYS列以获得旧值?

感谢您的帮助。

谢谢, Mathew Liju

3 个答案:

答案 0 :(得分:0)

也许你可以从列中删除“generation”并在再次使用适当的值导入后添加它。

答案 1 :(得分: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,请确保更改列以确保将来生成的值不会与刚刚插入表中的行冲突。

答案 2 :(得分:0)

@Ian Bjorhovde给了你选择。

IMPORT实际上在后台执行INSERT - 即,它首先使用参数标记准备INSERT语句,并使用输入文件中的值来表示这些标记。

在SQL快照中,您将看到使用的INSERT语句。

使用IMPORT(种类......)

时,无法在INSERT语句中执行任何操作