批量插入字段映射不正确

时间:2013-02-11 01:25:01

标签: sql sql-server sql-server-2008 tsql

我正在尝试批量插入。

这是我的sql脚本

GO
Use test
DROP TABLE PDTEST
create table pdtest
(
 CustID INT IDENTITY(1,1),
 work_phone_extension varchar(5),
 residential_postal_or_zip_code varchar(30),
 residential_street_address_line_1 varchar(30),
 residence_phone varchar(17),
 work_phone varchar(17),
 name_part varchar(30),
 mailing_city varchar(20),
 mailing_postal_or_zip_code varchar(30),
 mailing_street_address_line_2 varchar(30),
 mailing_street_address_line_1 varchar(30),
 cell_phone varchar(17),
 residential_city varchar(20),
 residential_country_and_province_or_state varchar(10),
 mailing_country_and_province_or_state varchar(10)
)
BULK INSERT pdtest
FROM 'C:\Python27\Scripts\pd.csv'
WITH
(
 FIELDTERMINATOR = ',',
 ROWTERMINATOR = '\n',
 KEEPNULLS,
 FIRSTROW = 2
)
GO

这是我的文本行

,91234,,,,WOLFIE HOWLETT,416-,Toronto,,,,,Toronto,CA_ON,CA_ON

我的所有专栏都搞砸了。名称部分应该有Wolfie Howlett。它有416-然后工作电话扩展应为null但它的值为91234,而residential_postal_or_zip_code为null,这是错误的。

这里的字段映射是错误的。我该怎么做才能纠正它?

2 个答案:

答案 0 :(得分:0)

所以你的问题是你有一个逗号作为你的第一个字符,所以SQL将它之前的空格作为列值处理并将其插入到CustID中,所以所有内容都右移一个。因此,要么在CustID之前在测试表中创建一个虚拟列,要么删除行中的第一个逗号。

答案 1 :(得分:0)

很抱歉,但你必须编辑你的文本文件。它正在创建语法错误,因此必须进行修改。我可以建议您删除和添加具有相同名称和位置的新文本文件。

看到你的语法,似乎你已经给你的第一列“自动增量”了。因此,您无需为CustID提供值,也无需在csv文件中保留该逗号。

Sql将自己获取CustId值。为csv文件提供以下语法

91234,,,,WOLFIE HOWLETT,416-,Toronto,,,,,Toronto,CA_ON,CA_ON

希望它会有所帮助!