首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带标识(自动增量)列的大容量插入

带标识(自动增量)列的大容量插入
EN

Stack Overflow用户
提问于 2012-06-01 13:18:07
回答 9查看 143.2K关注 0票数 81

我试图从CSV文件中添加大量数据到数据库中。

Employee表有一个列ID (PK)自动递增。

代码语言:javascript
运行
复制
CREATE TABLE [dbo].[Employee](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [Name] [varchar](50) NULL,
 [Address] [varchar](50) NULL
) ON [PRIMARY]

我正在使用以下查询:

代码语言:javascript
运行
复制
BULK INSERT Employee  FROM 'path\tempFile.csv ' 
WITH (FIRSTROW = 2,KEEPIDENTITY,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');

.CSV文件-

代码语言:javascript
运行
复制
Name,Address
name1,addr test 1
name2,addr test 2

但它会导致以下错误消息:

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-06-01 13:24:02

不要直接将插入插入到实际表中。

我会一直

从CSV文件

  1. 插入到暂存表dbo.Employee_Staging (没有IDENTITY列),
  2. 可能会编辑/清理/操作导入的数据
  3. ,然后使用T语句将数据复制到实际表中,如下所示:

插入到dbo.Employee(名称,地址),选择名称,地址从dbo.Employee

票数 60
EN

Stack Overflow用户

发布于 2012-09-12 20:22:15

将id列添加到csv文件中,并将其保留为空:

代码语言:javascript
运行
复制
id,Name,Address
,name1,addr test 1
,name2,addr test 2

从查询中删除KEEPIDENTITY关键字:

代码语言:javascript
运行
复制
BULK INSERT Employee  FROM 'path\tempFile.csv ' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');

id标识字段将自动递增。

如果为csv中的id字段赋值,除非使用KEEPIDENTITY关键字,否则它们将被忽略,然后将使用它们而不是自动增量。

票数 109
EN

Stack Overflow用户

发布于 2014-04-25 13:51:06

我也有类似的问题,但我需要确保ID的顺序与源文件中的顺序一致。我的解决方案是对大容量插入使用视图:

保持表的原样并创建此视图(选择除ID列外的所有内容)

代码语言:javascript
运行
复制
CREATE VIEW [dbo].[VW_Employee]
AS
SELECT [Name], [Address]
FROM [dbo].[Employee];

然后,批量插入应该如下所示:

代码语言:javascript
运行
复制
BULK INSERT [dbo].[VW_Employee] FROM 'path\tempFile.csv ' 
WITH (FIRSTROW = 2,FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n');
票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10851065

复制
相关文章

相似问题

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