C# 将CSV加载到SQL Server时出错
我有一个像这样的SQL Server表C# 将CSV加载到SQL Server时出错,c#,sql-server,tsql,bulkinsert,C#,Sql Server,Tsql,Bulkinsert,我有一个像这样的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] FORE
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
它一直持续到10万行
我正试图通过Visual Studio通过T-SQL加载此.csv
,并使用以下查询:
BULK INSERT service
FROM 'C:\service.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
我发现以下错误,我不知道原因:
Msg 4864,第16级,状态1,第1行第1行第3列(RID)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)
诊断大容量插入问题的最简单方法是指定错误文件。错误文件将包含失败行的确切数据。根据MSDN,您还将获得一个控制文件,该文件将标识每个失败的行,并提供每个失败的详细信息
BULK INSERT service
FROM 'C:\service.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\r\n',
ERRORFILE = 'C:\ErrorFile.txt'
);
打开包含故障数据的错误文件时,请使用显示空白和不可打印字符的文本编辑器,或者使用显示模式显示每个字符的字符代码。如果您有任何意外字符,它们将显示。如果您使用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')
您可以按如下方式进行批量加载查询:
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')
既然您在Windows上,行终止符不应该是
\r\n
?WIndows使用回车符和换行符(CRLF,或\r\n
)作为行终止符*nix和OSX仅使用LF(\n
)。我认为这也是问题所在,但我尝试了使用,但仍然出现相同的错误。我应该补充一点,我还尝试了“0x0a”。至少对于一个包含三行(1…2…3
)的小示例,您的代码似乎工作正常。您是否尝试查看文件中失败的具体位置?请检查csv文件中的前导/尾随空格。根据csv格式,任何空格(即使在逗号之后)都是值的一部分,我没有检查行失败的地方。有没有简单的检查方法?我通过excel创建了一列并复制了两次,从而创建了csv文件。