SQL Server批量插入转换错误MSG 4864 HRESULT 0x80004005

时间:2016-02-04 12:06:50

标签: sql sql-server bulkinsert

这是我的第一个问题(过去几年我一直在潜伏和学习很多)。

我在SQL Server 2012中遇到批量插入问题,它会返回错误。

批量插入代码:

--DROP TABLE dbname.logg20160203
BULK INSERT dbname.logg20160204 
FROM 'x:\xxxx\SYSTEMID\log20151005t.ms'
WITH 
(
       FIRSTROW = 1,
       ORDER (Id),
       CODEPAGE = 'RAW',
       --DATAFILETYPE = 'char',
       FIELDTERMINATOR = '|',
       --ROWTERMINATOR = '\n',
       --ROWTERMINATOR = '\r',
       --ROWTERMINATOR = '\n\r',
       --ROWTERMINATOR = '\r\n',
       ROWTERMINATOR = '0x0a',
       TABLOCK, --Performance
       ERRORFILE = 'x:\xxxx\SYSTEMID\err104.log',
       FORMATFILE = 'x:\xxxx\SYSTEMID\formatfile-n.fmt',
       KEEPNULLS
);

返回错误:

  

Msg 4864,Level 16,State 1,Line 2
  批量加载数据转换错误(类型不匹配或无效字符   对于第2行第1列(TStamp)的指定代码页。

以下是消息中指定的数据:

    2|yyyy-mm-dd hh:mm:ss|||GTM|||cccccccc||||||

我的格式文件(以便我们可以在数据中保留瑞典字母)

    11.0
    14
    1       SQLCHAR             0       0       ""   1     col1               ""
    2       SQLCHAR             0       19      "\r\n"   2    col2        ""
    3       SQLCHAR             0       20      ""   3     col3              Finnish_Swedish_CI_AS
    4       SQLCHAR             0       5       ""   4     col4             Finnish_Swedish_CI_AS
    5       SQLCHAR             0       10      ""   5     col5              Finnish_Swedish_CI_AS
    6       SQLCHAR             0       20      ""   6     col6           Finnish_Swedish_CI_AS
    7       SQLCHAR             0       20      ""   7     col7            Finnish_Swedish_CI_AS
    8       SQLCHAR             0       100     ""   8     col8             Finnish_Swedish_CI_AS
    9       SQLCHAR             0       10      ""   9     col9           Finnish_Swedish_CI_AS
    10      SQLCHAR             0       20      ""   10    col10            Finnish_Swedish_CI_AS
    11      SQLCHAR             0       20      ""   11    col11              Finnish_Swedish_CI_AS
    12      SQLCHAR             0       20      ""   12    col12              Finnish_Swedish_CI_AS
    13      SQLCHAR             0       20      ""   13    col13              Finnish_Swedish_CI_AS
    14      SQLCHAR             0       20      ""   14    col14           Finnish_Swedish_CI_AS

err104.log

    Row 2 File Offset 331 ErrorFile Offset 0 - HRESULT 0x80004005
    Row 3 File Offset 637 ErrorFile Offset 306 - HRESULT 0x80004005
    Row 4 File Offset 978 ErrorFile Offset 647 - HRESULT 0x80004005
    Row 5 File Offset 1278 ErrorFile Offset 947 - HRESULT 0x80004005
    Row 6 File Offset 1627 ErrorFile Offset 1296 - HRESULT 0x80004005
    Row 7 File Offset 1946 ErrorFile Offset 1615 - HRESULT 0x80004005
    Row 8 File Offset 2300 ErrorFile Offset 1969 - HRESULT 0x80004005
    Row 9 File Offset 2597 ErrorFile Offset 2266 - HRESULT 0x80004005
    Row 10 File Offset 2940 ErrorFile Offset 2609 - HRESULT 0x80004005
    Row 11 File Offset 3261 ErrorFile Offset 2930 - HRESULT 0x80004005
    Row 12 File Offset 3564 ErrorFile Offset 3233 - HRESULT 0x80004005

提前致谢!如果您对问题本身有任何意见或需要任何详细信息,请随时提出。

1 个答案:

答案 0 :(得分:1)

DATETIME的允许格式:

  • YYYY-MM-DDThh:mm:ss[.mmm]
  • YYYYMMDD[ hh:mm:ss[.mmm]]

矩形括号之间的东西是可选的。第一种格式的T是字符T。在第二个版本中,DDhh之间有一个空格(如果hh存在)

此外,格式文件中缺少分隔符。如果在BULK INSERT语句中指定了格式文件,则需要在格式文件中提供有效的字段终止符。因此,您需要在格式文件中指定|作为字段终止符。如果您的行终止符为\r\n,那么您需要将其指定为格式文件中的最终字段终止符。

请参阅Create a Format File (SQL Server)关于如何执行此操作的官方文档。