我尝试将.csv中的数据插入到MS SQL数据库中。我是这样做的:
CREATE TABLE [dbo].[prescreen_candidateData](
[id] [varchar](50) DEFAULT '',
[email] [varchar](50) DEFAULT '',
[firstname] [varchar](50) DEFAULT '',
[lastname] [varchar](50) DEFAULT '',
[city] [varchar](50) DEFAULT '',
[address] [varchar](50) DEFAULT '',
[phone] [varchar](50) DEFAULT '',
[birthday] [varchar](50) DEFAULT '',
[candidateurl] [varchar](50) DEFAULT '',
[createdAt] [varchar](50) DEFAULT '') ON [PRIMARY]
创建表后,我尝试插入如下:
BULK INSERT [dbo].[prescreen_candidateData] FROM '\\server2\prescreen$\candidateData.csv' WITH (
FIRSTROW = 2,
FIELDTERMINATOR = '\,',
ROWTERMINATOR = '\n',
KEEPNULLS
);
我的.csv建立在这样的基础上:
id,email,firstname,lastname,city,address,phone,birthday,candidateurl,createdAt
例如:
58282,xx_yy@gmail.com,Michael,Meier,,"""Street Nr 12,08159,City""",012345678910,"1996-08-29 00:00:00",https://linktoemployee, 2016-05-12
在我的例子中,城市是空的,在我的csv中它显示为,这没关系,但我的问题是adressfield,因为adressfield包含,但是,是终结者......我怎么能这样做,那个在批量插入中,它位于""会被忽略吗?
编辑: **我通过创建一个到csv的链接服务器来解决它...按我的意愿工作**
答案 0 :(得分:2)
您应该使用格式文件来描述要上传的数据。除此之外,格式文件还允许您为数据中的各个列指定分隔符。您需要在查询中引用格式文件:
BULK INSERT [dbo].[prescreen_candidateData] FROM '\\server2\prescreen$\candidateData.csv'
WITH (
FORMATFILE='\\server2\prescreen$\YourFormat.fmt'
);
对于您的场景,请创建一个这样的格式文件(请注意,它需要在文件末尾添加一个新行,否则会出错):
9.0
10
1 SQLCHAR 0 50 "," 1 id ""
2 SQLCHAR 0 50 "," 2 email SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 50 "," 3 firstname SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 50 "," 4 lastname SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 50 ",\"\"\"" 5 city SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 50 "\"\"\"," 6 address SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 50 ",\"" 7 phone SQL_Latin1_General_CP1_CI_AS
8 SQLCHAR 0 50 "\"," 8 birthday SQL_Latin1_General_CP1_CI_AS
9 SQLCHAR 0 50 "," 9 candidateurl SQL_Latin1_General_CP1_CI_AS
10 SQLCHAR 0 50 "\r\n" 10 createdAt SQL_Latin1_General_CP1_CI_AS
下图说明了各个领域的用途。
您会注意到格式文件允许您为每个字段指定终止符。您还会注意到我指定了一个逗号,后跟3个引号作为City的分隔符(“,\”\“\”)。类似地,对于地址字段,我指定了3个引号的分隔符,后跟逗号(\“\”\“,)。因此,城市和地址分隔符中的所有内容将一起上传,包括任何”,“。通过在您的引号中包含引号您可以避免使用数据上传报价,也可以让您在数据上传中使用逗号','