文本导入SQL SERVER遇到问题

sqldba01 2009-11-02 09:21:17
使用bulk insert把文本导入SQL SERVER遇到问题:

BULK INSERT dbname..user FROM 'c:\123.txt'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
采用这种方式导入的时候,如果表的字段数和文本的字段数一样的时候是没有问题的。

但是我现在表里有5个字段,col1,col2,col3,col4,col5;
文本有3个字段,col1,col3,col4.

这种情况我应该怎么导入?

采用bulk insert或bcp方式,分别应该怎么写?
...全文
163 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
对不起,刚才是我自己干错了,现在可以了。

太强大了,结贴。
-狙击手- 2009-11-02
  • 打赏
  • 举报
回复
fmt是扩展名?
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
format.fmt:
8.0
3
1 SQLCHAR 0 20 "," 2 userName Chinese_PRC_CI_AS
2 SQLCHAR 0 100 "," 4 address Chinese_PRC_CI_AS
3 SQLCHAR 0 20 "\r\n" 5 phone ""


test.txt:
aa,bb,cc
11,22,33
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
CREATE TABLE userinfo(id int identity,userName varchar(20),
pass varchar(20),address varchar(100),phone varchar(20),
email varchar(128),registerTime datetime)

BULK INSERT userinfo
FROM 'c:\study\test.txt'
WITH
(
FORMATFILE = 'c:\study\format.fmt',
FIRSTROW = 2
)


我明明在c:\study\下建立了format.fmt',但提示下列错误:
服务器: 消息 4860,级别 16,状态 1,行 1
未能进行大容量插入。文件 'c:\study\format.fmt' 不存在。
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
嗯,谢谢,我试试
liangCK 2009-11-02
  • 打赏
  • 举报
回复
仔细看吧.跟你的要求是完全一样的.
liangCK 2009-11-02
  • 打赏
  • 举报
回复
FIRSTROW = 2 --这个应该是跳过前2个字段的意思吧?
------
FIRSTROW是从文件的第二行开始导入.因为我的例子中.文件的第一行是列的名称.不用导入.
如果你的文件的第一列不是列的名称.就不用加这个.
liangCK 2009-11-02
  • 打赏
  • 举报
回复
G:\format.fmt

8.0
3
1 SQLCHAR 0 20 "," 2 userName Chinese_PRC_CI_AS
2 SQLCHAR 0 100 "," 4 address Chinese_PRC_CI_AS
3 SQLCHAR 0 20 "\r\n" 5 phone ""


G:\test.txt

userName,address,phone
hua,湖南,5971898

--SQL SERVER
--建表
CREATE TABLE userinfo(id int identity,userName varchar(20),
pass varchar(20),address varchar(100),phone varchar(20),
email varchar(128),registerTime datetime)

--导入
BULK INSERT userinfo
FROM 'G:\test.txt'
WITH
(
FORMATFILE = 'G:\format.fmt',
FIRSTROW = 2
)


--查看数据
SELECT * FROM userinfo;

/*
id userName pass address phone email registerTime
----------- --------- ---------- ----------- ---------- ---------- -------------
1 hua NULL 湖南 5971898 NULL NULL

(1 行受影响)
*/
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
我是SQL 2000
sqldba01 2009-11-02
  • 打赏
  • 举报
回复
感谢大家的回复
刚才看了楼上的链接,下边这个方式好像也满足不了我的需求
BULK INSERT userinfo
FROM 'G:\test.txt'
WITH
(
FORMATFILE = 'G:\format.fmt',
FIRSTROW = 2 --这个应该是跳过前2个字段的意思吧?
)

我是要导入第一,第三,第四个字段,有办法吗?

-狙击手- 2009-11-02
  • 打赏
  • 举报
回复
学习小梁,不再乱帖
--小F-- 2009-11-02
  • 打赏
  • 举报
回复
用格式化语言进行过滤
--小F-- 2009-11-02
  • 打赏
  • 举报
回复
--用这个试下
EXEC master..xp_cmdshell 'BCP "SELECT col1,col3,col4 FROM tb" queryout c:\currency2.txt -c -U"sa" -P"password"'
liangCK 2009-11-02
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090913/15/FA2E7E65-73D8-4B64-B6E0-BD583F564D86.html
liangCK 2009-11-02
  • 打赏
  • 举报
回复
不要乱贴了.
liangCK 2009-11-02
  • 打赏
  • 举报
回复
使用格式化文件.
  • 打赏
  • 举报
回复
sql访问txt文件的两种方法
select * from openrowset('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\',a#txt)
select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=yes;database=E:\')...a#txt

Name ID Xtype UID
sysrowsetcolumns 4 S 4
sysrowsets 5 S 4
sysallocunits 7 S 4
sysfiles1 NULL S 4
syshobtcolumns ; S
__________________________________________________________________________________________
查询文本文件的内容:

上面的方法,是把所有的内容放在一列里面,如果要分成多个列的话,则需要定义schema.ini文件。schema.ini要和数据文件放在同一个目录下面

schema.ini文件的定义方法:
[b.txt]
ColNameHeader=true
format=tabdelimited
col1=Name Text WIDTH 10
col2=ID Text WIDTH 10
col3=Xtype Text WIDTH 10
col4=UID Text WIDTH 10
第一行:如果文本文件的数据有列名,并且作为查询结果的列名的话,则ColNameHeader应该为true,否则定义为false,但是如果后面定义了列名的话,则不使用文本文件中数据的列名,而使用后面定义的列名。但是如果数据有列名的,最好定义为true,否则的话,数据的列名将作为表中的数据。
第二行:format定义数据的分隔符。一般使用的分隔符有空格,制表符,逗号。分别对应的是delimited( )(注意括号里应该有一个空格),tabdelimited,csvdelimited。在选择分隔符的时候,建议使用tab,因为这样的话数据看起来比较整齐,但是不能为了保证数据的严格整齐,而在数据当中使用多个tab,这样的话读取的数据就会出现错误。其他的逗号和空格同样。
第三行到最后:制定列名。在这里需要制定每一列的列名,数据类型。数据类型包括:
microsoft jet数据类型:bit,byte,short,long,currency,single,double,datetime,text,momo。
ODBC数据类型:char,float,int,longchar,date.
后面还应该有:指定字符集:使用ansi或者oem
特别数据类型转换。后面两个如果没有特殊情况的话,可以不写,才用默认的即可。
  • 打赏
  • 举报
回复
中间加逗号隔开试试
col1,,col3,col4,
SQL77 2009-11-02
  • 打赏
  • 举报
回复
BCP查询方式

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧