我有一个像这样的SQL Server表
CREATE TABLE [dbo].[Service]
(
[SID] INT IDENTITY (1, 1) NOT NULL,
[LID] INT NOT NULL,
[RID] INT NOT NULL,
PRIMARY KEY CLUSTERED ([SID] ASC),
CONSTRAINT [FK_dbo.Service_dbo.Location_LID]
FOREIGN KEY ([LID])
REFERENCES [dbo].[Locations] ([LID]) ON DELETE CASCADE,
CONSTRAINT [FK_dbo.Service_dbo.Rates_RID]
FOREIGN KEY ([RID])
REFERENCES [dbo].[Rates] ([RID]) ON DELETE CASCADE
)
我有一个.csv
文件,实际上是3列升序数字,从1-100000开始
示例:
1,1,1
2,2,2
3,3,3
并且它会持续到100k行。
我正在尝试使用此查询通过Visual Studio通过T-SQL加载此.csv
:
BULK INSERT service
FROM 'C:\service.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
我收到以下错误,但我不知道原因:
Msg 4864,Level 16,State 1,Line 1
第1行第3列(RID)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
答案 0 :(得分:0)
诊断BULK INSERT问题的最简单方法是指定错误文件。错误文件将包含失败行的确切数据。根据MSDN,您还将获得一个控制文件,该文件将识别每个失败的行并提供有关每个失败的详细信息。
BULK INSERT service
FROM 'C:\service.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\r\n',
ERRORFILE = 'C:\ErrorFile.txt'
);
当您打开包含失败数据的错误文件时,请使用显示空格和不可打印字符的文本编辑器,或者使用显示模式显示每个字符的字符代码的文本编辑器。如果您有任何意外的字符,它们就会显示出来。
答案 1 :(得分:0)
如果您使用Excel保存CSV文件,请确保已将其另存为“CSV(MS-DOS)”而不是“CSV(Macintosh)”。如果CSV文件是正确的CSV文件格式,则可以尝试使用格式文件进行批量加载。 您的CSV格式文件应如下所示:
9.0
3
1 SQLINT 0 4 "," 1 SID ""
2 SQLINT 0 4 "," 2 LID ""
3 SQLINT 0 4 "\r\n" 3 RID ""
您可以批量加载查询,如下所示:
BULK INSERT [Service]
FROM 'C:\import_dos.csv'
WITH (FORMATFILE = 'C:\temp\services.FMT')