use*_*877 3 sql-server bulkinsert spatial
我正在尝试bulk insert
从 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'
)
Run Code Online (Sandbox Code Playgroud)
批量插入代码应该去掉第一行并将数据插入到表中。它摆脱了第一行,但在分隔符部分变得混乱。第一列是 wkt,列值是双引号,值内有逗号。
所以我想我的问题是是否有办法告诉BULK INSERT
双引号部分是一列,而不管其中的逗号如何?
CSV 文件如下所示,
"MULTIPOLYGON (((60851.286135090661 510590.66974495345,60696.086128673756 510580.56976811233,60614.7860844061 510579.36978015327,60551.486015895614)))", 123123.22
Run Code Online (Sandbox Code Playgroud)
您需要使用“格式文件”来实现批量插入的文本限定符。本质上,您需要告诉批量插入每个字段中可能存在不同的分隔符。
创建一个名为“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
Run Code Online (Sandbox Code Playgroud)
第一行“11.0”指的是您的 SQL 版本。第二行显示您的表 [level2_import] 有两列。之后的每一行将描述一个列,并遵循以下格式:
[源列号][数据类型][最小大小][最大大小][分隔符模式][目标列号][目标列名][数据库区分大小写]
创建该文件后,您可以使用以下批量插入语句读入数据:
BULK INSERT level2_import
FROM 'D:\test.csv'
WITH
(
FIRSTROW = 2,
FORMATFILE='D:\level_2.fmt'
);
Run Code Online (Sandbox Code Playgroud)
有关格式文件的详细说明,请参阅此博客。
SQL Server 2017 终于添加了对文本限定符和RFC 4180 中定义的CSV 格式的支持。写下应该就够了:
BULK INSERT level2_import
FROM 'D:\test.csv'
WITH ( FORMAT = 'CSV', ROWTERMINATOR = '\n', FIRSTROW = 2 )
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45624 次 |
最近记录: |