我的最后一栏没有填充

时间:2016-02-22 21:14:49

标签: sql sql-server tsql

我正在尝试使用非xml格式文件将空分隔文件批量导入sql。我已经在相关的临时表中添加了一个列,并更新了格式文件以反映这一点。除了最后一栏,一切似乎都插入正常。我添加的专栏是

Comments (nvarchar(256), null)

格式文件如下所示:

11.0
8
1   SQLNCHAR    0   4   "\0\0"  1   ClaimCheckSetId ""
2   SQLNCHAR    0   4   "\0\0"  2   BatchValidationId   ""
3   SQLNCHAR    0   4   "\0\0"  3   SourceCommunicationId   ""
4   SQLNCHAR    0   4   "\0\0"  4   TargetCommunicationId   ""
5   SQLNCHAR    0   1800    "\0\0"  5   TargetExternalCommunicationId   ""
6   SQLNCHAR    0   8   "\0\0"  6   TargetSentDateTime  ""
7   SQLNCHAR    0   2000    "\0\0"  7   TargetSubject   ""
8   SQLNCHAR    0   256 "\r\0\n\0"  8   Comments ""

SQL看起来像这样:

DECLARE @filepath NVARCHAR(MAX) = 'C:\{file to import}_512fc21d-dbc9-4975-8169-2ca383ac2bdf.txt';
DECLARE @formatpath NVARCHAR(MAX) = 'C:\{format file}.txt';
DECLARE @bulkinsert NVARCHAR(MAX);

SET
        @bulkinsert = 
        N'BULK INSERT 
            [The Table]
            FROM ''' +
            @filepath + N''' 
            WITH 
            (
                FORMATFILE = ''' +
                @formatpath + N''',
                DATAFILETYPE = ''WIDECHAR'',
                FIRSTROW = 1
            )';

    SET ANSI_WARNINGS OFF;
    EXEC sp_executesql @Bulkinsert;
    SET ANSI_WARNINGS ON;

我没有收到任何错误,并且返回了许多受影响的行。不幸的是,我不太了解SQL来诊断这个问题。几个小时的谷歌搜索也没有帮助。我希望你们其中一个善良的家伙或女士们可以让我恢复正常和狭窄。

更新:我编辑了\ r \ 0 \ n \ 0到\ r \ n,现在出错了!

OLE DB provider 'BULK' for linked server '(null)' returned invalid data for column '[BULK].InsertedDateTime'.

2 个答案:

答案 0 :(得分:1)

您应该在显示特殊符号的编辑器中检查输入文件。就个人而言,我使用Notepad++(免费)(View > Show Symbol > Show All Characters),但任何体面的编辑都会这样做。

这样行终止符(即最后一个字段终止符)应该清晰可见。在Notepad ++中,\0将显示为NUL\r AS CR\n AS LF

因此,根据您目前的设置,您应该看到CR NUL LF NUL。如果您没有,请将最后一个字段终止符更改为您在所使用的编辑器中看到的内容。

答案 1 :(得分:0)

由于我的信息有限,请您更改以下内容

8   SQLNCHAR    0   256 "\r\0\n\0"  8   Comments ""

8   SQLNCHAR    0   256 "\r\n"  8   Comments ""

8   SQLNCHAR    0   256 "\0\0"  8   Comments ""

似乎最后一个应该换行到新行。