我正在尝试使用SQLServerBulkCSVFileRecord加载CSV数据,但是这似乎不允许使用封闭的字段(带引号的引号)并提供NULL值。
关于如何使它工作的任何建议?似乎需要加载CSV文件这样的基本功能。
我当前正在使用的代码:
final SQLServerBulkCopy copymanager = new SQLServerBulkCopy(connection);
final SQLServerBulkCSVFileRecord csv = new SQLServerBulkCSVFileRecord(datafile.toString(), true);
final ResultSet resultSet = connection.createStatement().executeQuery(
String.format("select * from [%s].[%s]", getSchema(), tableName));
for (int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
csv.addColumnMetadata(i, resultSet.getMetaData().getColumnName(i), resultSet.getMetaData().getColumnType(i),
resultSet.getMetaData().getPrecision(i), resultSet.getMetaData().getScale(i));
}
copymanager.setDestinationTableName(tableName);
copymanager.writeToServer(csv);
答案 0 :(得分:0)
有趣的是,SQLServerBulkCSVFileRecord的源有一个comment
- BCP和BULK INSERT都将双引号视为数据的一部分,如果要使用任何数据(例如“ 10”),则会引发错误。
- 插入到数字列中。我们的实现也是如此。
这意味着您将必须解析代码中的每一行以取消引用的值。
只要提供NULL值,就可以在代码中完成,我们在表中提供DEFAULT值。您的选择。