我使用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
答案 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'
);