由于Excel数据不是由我创建的,所以如果它可以扫描文件并发现其中包含哪种类型的数据,并建议在数据库中创建一个表格,那就太好了。
此外,如果我可以将文件与已经存在于数据库表中的数据进行比较,并且我可以选择要加载哪些数据和哪些不加载,那就更好了。
加载CSV文件的工具也可以,我可以在加载之前从Excel中“另存为”CSV格式。
CHAR
列,使您能够按原样导入数据。它还允许您修改配置,如更改列长度和不同的列类型。persons.csv
文件:ID,Lastname,Firstname,Email
1,Doe,John,john@example.org
2,Doe,Jane,jane@example.org
3,Deer,Jason,jason@example.org
4,Deer,Jillian,jillian@example.org
^
替换为\
)。ext-table-gen --csv-file=C:\FirebirdData\csv\persons.csv ^
--table-file=C:\FirebirdData\exttables\persons.dat ^
--config-out=C:\FirebirdData\csv\persons.xml
C:\FirebirdData\
替换为实际路径(或使用相对路径,尽管我不建议这样做,原因在用户手册中有解释)。persons.dat
包含外部表数据。以这种形式,它是一个固定宽度的文本格式,但如果您修改配置以使用其他数据类型,它实际上是一个固定宽度的二进制格式。
persons.xml
包含用于生成 persons.dat
的配置,以及生成外部表以实际读取它所需的 DDL。<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<extTableGenConfig xmlns="https://www.lawinegevaar.nl/xsd/ext-table-gen-1.0.xsd" schemaVersion="2.0">
<externalTable name="DEFAULT_EXTERNAL_TABLE_NAME" byteOrder="LITTLE_ENDIAN">
<columns>
<column name="ID">
<char length="1" encoding="ISO8859_1"/>
</column>
<column name="Lastname">
<char length="4" encoding="ISO8859_1"/>
</column>
<column name="Firstname">
<char length="7" encoding="ISO8859_1"/>
</column>
<column name="Email">
<char length="19" encoding="ISO8859_1"/>
</column>
<endColumn type="LF"/>
</columns>
<tableFile path="C:\FirebirdData\exttables\persons.dat" overwrite="false"/>
</externalTable>
<tableDerivation columnEncoding="ISO8859_1" endColumnType="LF"/>
<csvFile path="C:\FirebirdData\csv\persons.csv" charset="UTF-8" headerRow="true">
<rfc4180CsvParser/>
</csvFile>
<informational>
<ddl>create table "DEFAULT_EXTERNAL_TABLE_NAME" external file 'C:\FirebirdData\exttables\persons.dat' (
"ID" char(1) character set ISO8859_1,
"Lastname" char(4) character set ISO8859_1,
"Firstname" char(7) character set ISO8859_1,
"Email" char(19) character set ISO8859_1,
"LF" char(1) character set ASCII default _ASCII x'0a'
);
</ddl>
</informational>
</extTableGenConfig>
你可以在Firebird数据库中执行DDL来创建外部表,然后查询它(在读取文件之前,您需要修改ExternalFileAccess
设置,请参阅Firebird配置部分了解详细信息)。
用户手册还描述了如何通过更改列长度使配置文件更具可重用性,以及如何使用不同的数据类型。修改配置文件后,您需要重新运行工具以使用新格式导出文件(并重新生成DDL)。
默认情况下,使用RFC 4180 CSV格式,但您可以更改配置以支持其他CSV文件格式。
BULK INSERT
另一种方法是在Excel中创建公式,将要导出的数据放入新单元格中。该公式包括字符串格式和长度,根据Firebird中字段的长度进行设置。因此,您可以将所有这些单元格从Excel复制并粘贴到文本编辑器中,以便在Firebird中使用BULK INSERT策略。
更多详细信息请参见http://www.firebirdfaq.org/faq209/
问题是如果您有要导入的blob或null数据,请查看是否有此类值以及此方式是否适合您。 如果您在txt文件中有格式化数据,则BULK INSERT将是快速的方法。
提示:您还可以禁用与表相关联的触发器和索引以加快BULK INSERT的速度,然后再启用它们。
罗伯托·诺瓦科斯基
还有适用于Firebird和Interbase的EMS数据导入工具http://www.sqlmanager.net/en/products/ibfb/dataimport
虽然不是免费的,但它接受多种格式,包括CSV和Excel。
编辑
另一个类似的付费工具是Firebird Data Wizard http://www.sqlmaestro.com/products/firebird/datawizard/
有一些在线工具可以帮助您从csv头文件/示例转储文件生成DDL/DML脚本,请查看:http://www.convertcsv.com/csv-to-sql.htm 然后,您可以使用sql-workbench的Data Pumper或WbImport Tool从命令行进行操作。 Orbada拥有GUI,也支持导入csv文件。 DBeaver免费版也支持开箱即用地导入csv。