【发布时间】:2017-01-17 05:54:26
【问题描述】:
我正在尝试导入以管道分隔的平面文件,但出现以下错误:
消息 4832,第 16 级,状态 1,第 1 行 批量加载:在数据文件中遇到了意外的文件结尾。 消息 7399,第 16 层,状态 1,第 1 行 链接服务器“(null)”的 OLE DB 提供程序“BULK”报告了错误。提供商没有提供有关该错误的任何信息。 消息 7330,第 16 层,状态 2,第 1 行 无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。
我的代码:
IF OBJECT_ID('tempdb..##tblImport') IS NOT NULL DROP TABLE tempdb..##tblImport;
CREATE Table ##tblImport (VoucherNumber BIGINT,Currency VARCHAR(100),VoucherAmount MONEY, RetailAmount MONEY, VoucherDuration INT, ServiceProviderGroupID INT, BatchNumber BIGINT, SerialNumber int)
DECLARE @SQL VARCHAR(2000)
DECLARE @FilePath VARCHAR(1000)
SET @FilePath = 'C:\Users\Documents\Sample.txt'
SET @SQL = 'bulk insert ##tblImport from ''C:\Users\Documents\Sample.txt''
WITH
(
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''|\n''
)'
EXEC(@SQL)
SELECT * FROM ##tblImport
如果我删除行尾的管道并尝试将代码中的行分隔符更改为 '\n' 我会得到相同的错误。我尝试将 SERIAL NUMBER 列的类型更改为 VARCHAR(MAX) 然后最后一列填充所有记录。然后在 \n 之前给出空间再次给出上述错误。有人可以帮我输入数据的代码吗?
【问题讨论】:
-
FIELDTERMINATOR = '' |'', ROWTERMINATOR = '' |\n'' 如果我在分隔符之前给出空格,则会收到以下错误。 第 1 行第 8 列(序列号)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
-
仅供参考:@FilePath 变量已声明但未使用。
-
是的。我会改变的。谢谢你。 @SQL_Underworld
-
平面文件的第一行是什么样的?您是否查看过 FIRSTROW 选项的用法?
-
我还没有尝试过 FIRST ROW 选项。该文件没有列标题,整个文件有这样的行 2178058358449632|BWP|30.00|30.00|60|1|000000101205|0000000002128228|
标签: sql-server delimiter bulkinsert