SQL Server:BULK INSERT失败

时间:2014-09-11 17:56:06

标签: sql-server

我使用LOAD DATA INFILE从MySQL生成了制表符分隔数据文件,现在我尝试使用此文件将数据插入SQL Server;但是,我收到以下错误:

  

Msg 4863,Level 16,State 1,Line 2
  第1行第8列(key_version)的批量加载数据转换错误(截断)。

我猜测原因是行终止,因为如果文件只包含一条记录,则SQL Server中的BULK INSERT可以正常工作。我尝试使用

生成数据文件
LINES TERMINATED BY '\n' 

以及'\n\r'并且都返回相同的错误。

生成制表符分隔数据文件的MySQL查询是:

SELECT _id, event_timestamp, door_id, building_id, scanner_ip, key_id, key_name, key_version 
INTO OUTFILE 'B:/tmp/log_access_02.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
FROM log_access;

SQL Server中的表结构是:

CREATE TABLE [dbo].[log_access]
(
    [_id] [int] IDENTITY(1,1) NOT NULL,
    [event_datetime] [datetime] NOT NULL,
    [door_id] [int] NOT NULL,
    [building_id] [int] NOT NULL,
    [scanner_ip] [varchar](15) NOT NULL,
    [key_id] [varchar](35) NULL,
    [key_name] [varchar](25) NULL,
    [key_version] [varchar](10) NULL,

    CONSTRAINT [PK_log_access] PRIMARY KEY CLUSTERED 
    ([_id] ASC)
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[log_access] 
ADD CONSTRAINT [DF_Table_1_event_event_datetime]  
DEFAULT (getdate()) FOR [event_datetime]
GO

批量插入查询是:

BULK INSERT log_video_plays
FROM 'C:\share\log_access_02.txt'
WITH
(
   FIELDTERMINATOR = '\t'
   ,ROWTERMINATOR = '\n'
);

选项卡分隔数据文件的示例:

1353097539  2014-09-10 00:00:00 1   2   192.168.1.4 a0074895532256BCDA40EF1536E08BC7628a    ABFGKLP-BRASR_v12   2.35.538.11353097540    2014-09-10 00:00:00 1   2   192.168.1.35    x0074893552256454A40EF1536E08BC7628x    ABFGKLP-BRASR_v12   2.35.538.1

1 个答案:

答案 0 :(得分:0)

您可以使用其他线路终端序列,例如\ n \ r \ n(例如来自RISC OS),\ r \ n(例如Mac OS 9),\ n(大多数* nix系统,包括OS X)和\ r \ n(视窗)。先尝试一下......

BULK
INSERT log_video_plays
FROM 'C:\share\log_access_02.txt'
WITH
(
FIELDTERMINATOR = '\t'
,ROWTERMINATOR = '\r\n'
);