BULK INSERT:具有FieldTerminator,回车符和换行符的FlatFile为RowTerminator

时间:2017-01-17 05:54:27

标签: sql-server delimiter bulkinsert

我正在尝试导入管道分隔的平面文件,但是会出现以下错误:

  

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之前给出空格再次给出上述错误。有人可以帮我修改导入数据的代码吗?

2 个答案:

答案 0 :(得分:0)

' |'分隔字段/列和' | \ n'分隔记录/行。这意味着每条记录都应以' | \ n'结尾。表示下一个的开始。

答案 1 :(得分:0)

我已经读过某些地方,在SQL Server中,回车\ r \ n默认采用新行字符\ n(即[CR] [LF])。但这不正确。我的文件在每行末尾都有回车符和新行字符。所以我更改了下面的行分隔符

ROWTERMINATOR = ''|\r\n''

它确实完美无缺,我的问题得到了解决。