如何在SQL Server 2012中从CSV导入时将String字段解析为另一种类型?

时间:2014-01-16 19:05:12

标签: sql sql-server csv types insert

我从SQL Server 2012开始,我遇到了一些问题。

我想将数据从csv文件导入到表中。 csv文件中的一个字段是string,它只有“是”或“否”的值。

我已经看到SQL Server 2012中没有boolean类型,但有一个bit类型而不是boolean

我的问题是,当1为“是”时,如何在表格中存储值string;当0为“否”时,如果string存储BULK INSERT PRODUCT FROM 'C:\...\products.csv' WITH ( FIELDTERMINATOR = ';', ROWTERMINATOR = '\n', ERRORFILE = 'C:\...\errors.csv', TABLOCK)

我试过这个:

BULK INSERT

我正在使用{{1}},因为我有数千行,但我不知道这是否是最好的方式或我有什么替代方案(更好的选择)。

另一种方式或建议,我们将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以通过将'Yes'替换为1等来修改表中的数据,或者将数据放入临时表并在那里处理数据。我更喜欢后者,因为它允许您执行任何其他数据清理任务。

正如Aaron Bertrand建议的那样,您可以执行以下操作,将其从登台表加载到所需的表中,并将Yes/No修改为位:

INSERT dbo.Product(col1, col2, BITColumn)
  SELECT col1, col2, CASE col3 WHEN 'Yes' THEN 1 ELSE 0 END
  FROM dbo.StagingTable;

答案 1 :(得分:0)

SELECT
  col1,
  col2,
  CASE col3
    WHEN 'Yes' THEN CAST(1 AS bit)
    WHEN 'No'  THEN CAST(0 AS bit)
  END
INTO #my_temporary_staging_table
FROM OPENROWSET(
  BULK 'C:\...\products.csv',
  FIELDTERMINATOR = ';',
  ROWTERMINATOR = '\n',
) AS t(col1,col2,col3)