使用带有封装和空值的SQLServerBulkCSVFileRecord加载CSV数据

时间:2018-08-16 13:10:15

标签: c# sql-server csv jdbc sqlbulkcopy

我正在尝试使用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);

1 个答案:

答案 0 :(得分:0)

有趣的是,SQLServerBulkCSVFileRecord的源有一个comment

  
      
  • BCP和BULK INSERT都将双引号视为数据的一部分,如果要使用任何数据(例如“ 10”),则会引发错误。
  •   
  • 插入到数字列中。我们的实现也是如此。
  •   

这意味着您将必须解析代码中的每一行以取消引用的值。

只要提供NULL值,就可以在代码中完成,我们在表中提供DEFAULT值。您的选择。