首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不插入到自动编号列的情况下使用大容量插入?

如何在不插入到自动编号列的情况下使用大容量插入?
EN

Stack Overflow用户
提问于 2013-06-18 16:23:32
回答 2查看 3.4K关注 0票数 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/)

代码语言:javascript
复制
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指定我计划为每一列插入哪些列?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 17:11:28

我将-I总是这样做-创建一个临时(无索引,没有唯一ID,没有主键等)表并在那里批量插入CSV,然后将数据移动到目标表或更改表以使其看起来像我想要的那样。

原因是,格式化在某些情况下可能很复杂,它只是另一个错误的来源,更容易过滤出像字段是NOT NULL但CSV中有错误etc这样的问题。如果不是ASAP insert,也可以触发数据更新(例如,索引表可以在夜间运行)

我对CSV导入已经够头疼的了,所以...根据我的经验,最好的解决方案是创建一个临时表并对其进行修改或移动数据。当然,这是由您决定的:)

票数 1
EN

Stack Overflow用户

发布于 2013-06-18 16:53:32

您可以使用format file来指定BULK INSERT如何处理缺少的列。

您还可以创建一个不带ID列的临时表,并将其导入其中。然后,您可以执行可能需要的任何数据清理,并在生产表中执行普通插入。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17163940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档