我正在尝试使用非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'.
答案 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 ""
似乎最后一个应该换行到新行。