2

我的文件中有一些财务数据,CSV我想将其放入 SQL 表中。

我想运行我从这个来源改编的以下脚本:( http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk -insert-load-comma-delimited-file-into-sql-server/ )

CREATE TABLE Price
(ID INT IDENTITY(1,1) NOT NULL,
PriceDate datetime2,
OpenPrice decimal(10,4),
HighPrice decimal(10,4),
LowPrice decimal(10,4),
ClosePrice decimal(10,4),
Volume int,
AdjClose decimal(10,4),
AdjOpen decimal(10,4),
AdjLow decimal(10,4),
AdjHigh decimal(10,4)
)
GO


BULK
INSERT Price
FROM 'C:\Users\Public\Documents\bhp.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

我收到以下错误:

'Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ID).'

我认为,这是因为我的“ ID”是主键和自动编号增量。

显然我不想通过 CSV 生成这个数字(我计划稍后将多个 CSV 文件插入到这个表中),我希望它由数据库生成。

是否可以指定BULK INSERT我打算为每列插入哪些列?

4

2 回答 2

1

您可以使用格式文件来指定 BULK INSERT 如何处理丢失的列。

您还可以创建一个没有 ID 列的临时表并将其导入。然后,您可以执行任何可能需要的数据清理,并在生产表中执行正常的 INSERT。

您可以使用的另一个选项是针对您的生产表创建一个视图。在您的视图定义中,您将省略 ID 列。然后,您可以对视图进行 BULK INSERT。

于 2013-06-18T08:53:31.650 回答
1

我会 - 我总是这样做 - 创建一个临时(无索引、没有唯一 ID、没有主键等)表并在那里批量插入 CSV,然后将数据移动到目标表或更改表以使其看起来像我想要的那样。
原因是,在某些情况下,格式化可能很复杂,它只是另一个错误来源,更容易过滤字段不为空但 CSV 中有错误问题。如果不是 ASAP 插入,也可以触发更新数据(例如,索引表可以在一夜之间运行)
我对 CSV 导入感到头疼,所以......根据我的经验,最好的解决方案是临时表并 ALTER 它或移动数据. 但这当然是你的电话:)

于 2013-06-18T09:11:27.643 回答