Sql server SQL Server中带文本限定符的大容量插入
我正在尝试从CSV文件在表测试中批量插入几条记录Sql server SQL Server中带文本限定符的大容量插入,sql-server,bulkinsert,spatial,Sql Server,Bulkinsert,Spatial,我正在尝试从CSV文件在表测试中批量插入几条记录 CREATE TABLE Level2_import (wkt varchar(max), area VARCHAR(40), ) BULK INSERT level2_import FROM 'D:\test.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) 大容量插入代码应该去掉第一行并将数据插入表中。它可以去掉第
CREATE TABLE Level2_import
(wkt varchar(max),
area VARCHAR(40),
)
BULK
INSERT level2_import
FROM 'D:\test.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
大容量插入代码应该去掉第一行并将数据插入表中。它可以去掉第一行,但是在分隔符部分会混淆。第一列是wkt,列值是双引号,并且在值内有逗号
所以我想我的问题是,是否有办法告诉批量插入
双引号部分是一列,而不考虑其中的逗号
CSV文件如下所示
"MULTIPOLYGON (((60851.286135090661 510590.66974495345,60696.086128673756 510580.56976811233,60614.7860844061 510579.36978015327,60551.486015895614)))", 123123.22
您需要使用“格式文件”来实现批量插入的文本限定符。本质上,您需要教导批量插入,每个字段中可能有不同的分隔符 创建一个名为“level_2.fmt”的文本文件并保存它
11.0
2
1 SQLCHAR 0 8000 "\"," 1 wkt SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 40 "\r\n" 2 area SQL_Latin1_General_CP1_CI_AS
第一行“11.0”指的是您的SQL版本。第二行显示表[level2_import]有两列。之后的每一行将描述一列,并遵循以下格式:
[源列号][数据类型][最小大小][最大大小][分隔符模式][目标列号][目标列名][数据库区分大小写]
创建该文件后,可以使用以下批量插入语句读入数据:
BULK INSERT level2_import
FROM 'D:\test.csv'
WITH
(
FIRSTROW = 2,
FORMATFILE='D:\level_2.fmt'
);
有关格式文件的详细说明,请参阅本文档 尝试将.fmt删除到文件中,并改用.txt,这对我来说很有效SQL Server 2017终于添加了对文本限定符和RFC 4180中定义的文本的支持。写下以下内容就足够了:
BULK INSERT level2_import
FROM 'D:\test.csv'
WITH ( FORMAT = 'CSV', ROWTERMINATOR = '\n', FIRSTROW = 2 )
我在处理LDAP数据时遇到了这个问题,dn包含逗号,其他包含dns的字段也包含逗号。尝试将字段终止符更改为另一个未使用的字符,如管道或分号;。在数据和文件定义中执行此操作 因此,代码应该是:
CREATE TABLE Level2_import
(wkt varchar(max),
area VARCHAR(40),
)
BULK
INSERT level2_import
FROM 'D:\test.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
和您的CSV:
"MULTIPOLYGON (((60851.286135090661 510590.66974495345,60696.086128673756 510580.56976811233,60614.7860844061 510579.36978015327,60551.486015895614)))"; 123123.22
一个比我之前尝试的更简洁和相关的答案。非常感谢你的帮助。你知道我为什么会出现这个错误吗<代码>无法批量加载。文件“C:\mig\level_2.fmt”不存在。我已创建了包含建议内容的文件,但幸运的是,我猜您的文件位于SQL Server无法访问的位置。当文件在我的本地机器上时,我已经忘记了SQL Server正在远程运行并映射到不同的驱动器。尝试将该文件与您的csv文件放在同一文件夹中,这样您至少可以测试该功能。如果这样做有效,您可以将文件移回您想要的位置,并从SQL Server的角度确保它是一个有效的位置。希望能有所帮助。请您详细说明您的答案,并对您提供的解决方案进行更多描述,好吗?