我正在尝试导入管道分隔的平面文件,但是会出现以下错误:
Msg 4832,Level 16,State 1,Line 1 批量加载:数据文件中遇到意外的文件结尾。 Msg 7399,Level 1,State 1,Line 1 OLE DB提供程序" BULK"对于链接服务器"(null)"报告错误。提供商未提供有关错误的任何信息。 Msg 7330,Level 16,State 2,Line 1 无法从OLE DB提供程序中获取行" BULK"对于链接服务器"(null)"。
我的代码:
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'我犯了同样的错误。我尝试将序列号列的类型更改为 VARCHAR(MAX),然后最后一列填充所有记录。然后在\ n之前给出空格再次给出上述错误。有人可以帮我修改导入数据的代码吗?
答案 0 :(得分:0)
' |'分隔字段/列和' | \ n'分隔记录/行。这意味着每条记录都应以' | \ n'结尾。表示下一个的开始。
答案 1 :(得分:0)
我已经读过某些地方,在SQL Server中,回车\ r \ n默认采用新行字符\ n(即[CR] [LF])。但这不正确。我的文件在每行末尾都有回车符和新行字符。所以我更改了下面的行分隔符
ROWTERMINATOR = ''|\r\n''
它确实完美无缺,我的问题得到了解决。