这是我的第一个问题(过去几年我一直在潜伏和学习很多)。
我在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
提前致谢!如果您对问题本身有任何意见或需要任何详细信息,请随时提出。
答案 0 :(得分:1)
DATETIME的允许格式:
YYYY-MM-DDThh:mm:ss[.mmm]
YYYYMMDD[ hh:mm:ss[.mmm]]
矩形括号之间的东西是可选的。第一种格式的T
是字符T
。在第二个版本中,DD
和hh
之间有一个空格(如果hh
存在)
此外,格式文件中缺少分隔符。如果在BULK INSERT
语句中指定了格式文件,则需要在格式文件中提供有效的字段终止符。因此,您需要在格式文件中指定|
作为字段终止符。如果您的行终止符为\r\n
,那么您需要将其指定为格式文件中的最终字段终止符。
请参阅Create a Format File (SQL Server)
关于如何执行此操作的官方文档。