Sql 如何在不插入“自动编号”列的情况下使用批量插入?

Sql 如何在不插入“自动编号”列的情况下使用批量插入?,sql,sql-server,bulkinsert,Sql,Sql Server,Bulkinsert,我在一个CSV文件中有一些财务数据,我想把它放到一个SQL表中 我想运行以下脚本,该脚本是我从该源改编的:() 我收到以下错误: 第1行第1列(ID)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)。 我想,这是因为我的“ID”是主键和自动编号增量 显然,我不想通过CSV生成这个数字(我计划稍后在这个表中插入多个CSV文件),我希望它由数据库生成 是否可以指定批量插入为每列插入哪些列?您可以使用指定批量插入如何处理缺少的列 您还可以创建一个没有ID列的临时表,并导入到该表中。然后,您

我在一个
CSV
文件中有一些财务数据,我想把它放到一个SQL表中

我想运行以下脚本,该脚本是我从该源改编的:()

我收到以下错误:

第1行第1列(ID)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

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

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

是否可以指定批量插入为每列插入哪些列?

您可以使用指定批量插入如何处理缺少的列

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


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

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

顺便说一句,试试上面的问题,好问题+1。啊,谢谢,是的,你忽略了一个显而易见的解决方案,就像只使用临时表一样,这让你觉得很愚蠢@不客气。当一个人深入研究一个问题时,从来没有看到最简单的解决方案,这是人的本性——这就是为什么我们有堆栈溢出;)很高兴我能帮忙。干杯
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