我需要从SQL Server 2014中包含西里尔字符和其他utf-8字符的一些小csv文件中导入一些数据。
我知道只有sqlserver 2016(13)本身支持utf-8但....
谷歌围绕我建立了这个程序:
BULK INSERT [test].[dbo].[csv]
FROM 'C:\Book1.csv'
WITH
(
FIELDTERMINATOR = ','
,ROWTERMINATOR = '\n'
,DATAFILETYPE = 'widechar'
,CODEPAGE = 'OEM'
,FIRSTROW = 1
,TABLOCK
)
运作良好
但是,由于要导入的文件具有不同的结构(不同位置的不同字段名称),我认为最好的解决方案是为每个文件结构使用.fmt文件,因此类似这样:
BULK INSERT [test].[dbo].[csv]
FROM 'C:\Book1.csv'
WITH
(
FORMATFILE = 'C:\csv.FMT'
,DATAFILETYPE = 'widechar'
,CODEPAGE = 'OEM'
,FIRSTROW = 1
,TABLOCK
)
WHERE
csv.fmt
12.0
9
1 SQLNCHAR 2 200 "," 1 UserID Latin1_General_CI_AS
2 SQLNCHAR 2 60 "," 2 TypeID Latin1_General_CI_AS
3 SQLNCHAR 2 60 "," 3 TrackingID Latin1_General_CI_AS
4 SQLNCHAR 2 200 "," 4 Name Latin1_General_CI_AS
5 SQLNCHAR 2 200 "," 5 Address Latin1_General_CI_AS
6 SQLNCHAR 2 20 "," 6 PostalCode Latin1_General_CI_AS
7 SQLNCHAR 2 200 "," 7 City Latin1_General_CI_AS
8 SQLNCHAR 2 200 "," 8 StateOrProvince Latin1_General_CI_AS
9 SQLNCHAR 2 20 "\n" 9 CountryID Latin1_General_CI_AS
但我得到
批量加载失败。第1行第1列的数据文件中的列太长。验证是否正确指定了字段终止符和行终止符。 OLE DB提供程序" BULK"对于链接服务器"(null)"报告错误。提供商未提供有关错误的任何信息。 无法从OLE DB提供程序中获取行" BULK"对于链接服务器"(null)"。
我尝试使用不同版本的终结符:" \ n"," \ r \ n",还" \ r \ 0 \ n \ 0"如建议的那样
bcp test.dbo.csv format nul -F 1 -w -T -f csv.fmt
但没有效果。 可以建议方向吗? 感谢