我有一个存储过程,可以在SQL Server 2005数据库上进行批量插入。 当我从一些SQL(传入本地格式文件和数据文件的名称)调用此存储过程时,它工作正常。每一次。
但是,当使用SqlCommand.ExecuteNonQuery
从C#.NET 3.5代码调用此相同的存储过程时,它会间歇性地工作。
如果失败,则生成SqlException
,说明:
无法批量加载。格式文件“c:\ bulkinsert \ MyFile.fmt”
中的列号无效
我不认为此错误消息是正确的。
是否有人在从代码调用批量插入时遇到过类似的问题?
感谢。
答案 0 :(得分:1)
你是如何进行批量插入的?通常,问题(在这种情况下)是“c:\”是服务器的“c:\”,还是客户端的“c:\”。
然而。从C#代码开始,最简单的方法是使用SqlBulkCopy
。此类提供从托管代码直接访问批量插入功能,包括映射(尽管我从不打扰它们)。
如果文件类似于csv / tsv / similar,则强烈建议使用CsvReader。这提供了WriteToServer
最有效使用的IDataReader
界面。
答案 1 :(得分:0)
我认为这个问题与格式文件有关。 我不再使用格式文件,它现在似乎100%的工作。 我改为在SQL中指定字段和行终止符。
Declare @Sql Nvarchar(2000);
SET @Sql =
'Bulk Insert TestOutputPretest
From ''c:\rawdata\bulkinsert\Segment1839204.dat''
WITH
(
FIELDTERMINATOR ='','',
ROWTERMINATOR = ''\n''
)'
Exec sp_ExecuteSql @Sql;
答案 2 :(得分:0)
使用
Exec sp_ExecuteSql @Sql;
(100%正常工作)
exec(@sql)
不是很强大,因为它有一些限制