BULK INSERT:FlatFile 具有 FieldTerminator、Carriage Return 和 New Line 字符作为 RowTerminator

BULK INSERT: FlatFile having FieldTerminator, Carriage Return and New Line characters as RowTerminator

我正在尝试导入竖线分隔的平面文件,但出现以下错误:

Msg 4832, Level 16, State 1, Line 1 Bulk load: An unexpected end of file was encountered in the data file. Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error. Msg 7330, Level 16, State 2, Line 1 Cannot fetch a row from OLE DB provider "BULK" for linked server "(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”,我会得到同样的错误。我尝试将 SERIAL NUMBER 列的类型更改为 VARCHAR(MAX) 然后最后一列填充所有记录。然后在 \n 之前给出 space 再次给出上述错误。有人可以帮我导入数据的代码吗?

'|'分隔 fields/columns,'|\n' 分隔 records/rows。这意味着每条记录都应以“|\n”结尾以指示下一条记录的开始。

我在某处读到,在 SQL 服务器中,回车 return \r 默认使用换行符 \n(即 [CR][LF])。但这是不正确的。我的文件在每一行的末尾都有 Carriage Return 和换行符。所以我改变了行定界符如下

ROWTERMINATOR = ''|\r\n''

它确实运行良好,我的问题得到了解决。