zoe*_*oe 18 sql t-sql sql-server
我尝试将文本文件导入数据库时收到转换错误.以下是我收到的错误消息:
第1行第4列(年)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符).
这是我的查询代码:
CREATE TABLE Students
(
StudentNo Integer NOT NULL Primary Key,
FirstName VARCHAR(40) NOT NULL,
LastName VARCHAR(40) NOT NULL,
Year Integer,
GPA Float NULL
);
Run Code Online (Sandbox Code Playgroud)
以下是来自文本文件的示例数据:
100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008
Run Code Online (Sandbox Code Playgroud)
我想我知道问题是什么..下面是我的批量插入代码:
use xta9354
bulk insert xta9354.dbo.Students
from 'd:\userdata\xta9_Students.txt'
with (fieldterminator = ',',rowterminator = '\n')
Run Code Online (Sandbox Code Playgroud)
对于样本数据,在Year属性之后没有',',即使在年之后还有另一个属性Grade,它是NULL
有人可以告诉我如何解决这个问题吗?
Ker*_*mit 20
尝试使用格式文件,因为您的数据文件只有4列.否则,请尝试OPENROWSET或使用临时表.
myTestFormatFiles.Fmt 可能看起来像:
9.0 4 1 SQLINT 0 3 "," 1 StudentNo "" 2 SQLCHAR 0 100 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS 3 SQLCHAR 0 100 "," 3 LastName SQL_Latin1_General_CP1_CI_AS 4 SQLINT 0 4 "\r\n" 4 Year "
http://i.msdn.microsoft.com/dynimg/IC45684.gif
有关跳过列的本教程BULK INSERT也可能有所帮助.
您的陈述如下:
USE xta9354
GO
BULK INSERT xta9354.dbo.Students
FROM 'd:\userdata\xta9_Students.txt'
WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt')
Run Code Online (Sandbox Code Playgroud)
就我而言,我正在处理一个由linux盒子上的hadoop生成的文件.当我尝试导入到SQL时,我遇到了这个问题.最后修复是使用十六进制值'换行'0x0a.它也适用于批量插入
bulk insert table from 'file'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a')
Run Code Online (Sandbox Code Playgroud)