我从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}},因为我有数千行,但我不知道这是否是最好的方式或我有什么替代方案(更好的选择)。
另一种方式或建议,我们将不胜感激。
答案 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)