文本导入SQL,要能对应上字段

hua11018818 2009-09-13 03:32:26
麻烦各位大侠帮我写下,我要把文本数据导入到数据库,但是我本文只有3个字

段,我数据库有7个字段,我怎么把文本字段的对应到数据库,我不想用读文本

的方式,数据库的bulk insert 可以实现吗,能字段对应上可以吗,比如我的

数据库表(userinfo) id identity,userName,pass,address,phone,

email,registerTime
文本格式是
userName,address,phone
hua,湖南,5971898


这个可以用SQL脚本导入吗,我的数据很大,我现在是在程序读文本的方式一行

行插入的,速度太慢了,要5,6分钟
...全文
1271 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcwzm 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liangck 的回复:]
G:\format.fmt

XML code

8.0
3
1 SQLCHAR 0 20 "," 2 userName Chinese_PRC_CI_AS
2 SQLCHAR 0 100 "," 4 address ……
[/Quote]
好东西
fcwzm 2010-09-18
  • 打赏
  • 举报
回复
有用,好东西,,找了好长时间了 。。
gahyyai 2009-09-14
  • 打赏
  • 举报
回复
mark
hua11018818 2009-09-13
  • 打赏
  • 举报
回复
大哥厉害
黄_瓜 2009-09-13
  • 打赏
  • 举报
回复
学习
liangCK 2009-09-13
  • 打赏
  • 举报
回复
8.0  --这个8,表示版本是8.0
3 --这个3.表示数据文件中有几列.
第一列的1,2,3表示数据文件的列的序号
而后面的第六列的2,4,5表示userName,Address,phone在表中.是第几列
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 ""
liangCK 2009-09-13
  • 打赏
  • 举报
回复
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 行受影响)
*/
hua11018818 2009-09-13
  • 打赏
  • 举报
回复
请你帮我写个啊,我要导数据的时候最好用SQL 2000的,我们这里客户大多是这个数据库的,SQL 2005的企业版太大了,能帮帮忙吗
liangCK 2009-09-13
  • 打赏
  • 举报
回复
2000一样的.不过2000中不可以用xml格式化文件.
只能用非xml格式化文件.
非xml格式化文件比xml格式化文件的可读性差很多
黄_瓜 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liangck 的回复:]
引用 8 楼 hua11018818 的回复:
有个语法错误啊
在关键字 'BULK' 附近有语法错误。


sql server 2000?
[/Quote]梁哥再来个200o的
hua11018818 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hua11018818 的回复:]
有个语法错误啊
在关键字 'BULK' 附近有语法错误。
[/Quote]sqlserver 2000可以吗,如果可以的话我就不用在安装sqlserver2005了
黄_瓜 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hua11018818 的回复:]
对啊
我的是SQL server2000呢,呵呵
多谢了,如果对了我也可以改成2005,重装个数据库也可以,谢谢你了啊
[/Quote]
hua11018818 2009-09-13
  • 打赏
  • 举报
回复
对啊
我的是SQL server2000呢,呵呵
多谢了,如果对了我也可以改成2005,重装个数据库也可以,谢谢你了啊
JonasFeng 2009-09-13
  • 打赏
  • 举报
回复
自己先把数据组织好,然后一次插入或者分批插入。
黄_瓜 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liangck 的回复:]
G:\format.xml

XML code<?xml version="1.0"?><BCPFORMATxmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><RECORD><FIELDID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="20" COLLATION="Chinese_PRC_CI_AS"/><FIELDID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/><FIELDID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="20" COLLATION="Chinese_PRC_CI_AS"/></RECORD><ROW><COLUMNSOURCE="1" NAME="userName" xsi:type="SQLVARYCHAR"/><COLUMNSOURCE="2" NAME="address" xsi:type="SQLVARYCHAR"/><COLUMNSOURCE="3" NAME="phone" xsi:type="SQLVARYCHAR"/></ROW></BCPFORMAT>
SQL code
G:\test.txt

userName,address,phone
hua,湖南,5971898--SQL SERVER
--创建表CREATETABLE userinfo(idINTidentity,userNamevarchar(20),
passvarchar(20),addressvarchar(100),phonevarchar(20),
emailvarchar(128),registerTimedatetime)--导入INSERTINTO userinfo(userName,address,phone)SELECT*FROMOPENROWSET(BULK'G:\test.txt',FORMATFILE='G:\format.xml',FIRSTROW=2)AS T;--查看数据SELECT*FROM userinfo;/*
id userName pass address phone email registerTime
----------- --------- ---------- ----------- ---------- ---------- -------------
1 hua NULL 湖南 5971898 NULL NULL

(1 行受影响)*/
[/Quote]

学习
liangCK 2009-09-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hua11018818 的回复:]
有个语法错误啊
在关键字 'BULK' 附近有语法错误。
[/Quote]

sql server 2000?
hua11018818 2009-09-13
  • 打赏
  • 举报
回复
有个语法错误啊
在关键字 'BULK' 附近有语法错误。
liangCK 2009-09-13
  • 打赏
  • 举报
回复
使用格式化文件来跳过某些列.
liangCK 2009-09-13
  • 打赏
  • 举报
回复
G:\format.xml

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="20" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="100" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="20" COLLATION="Chinese_PRC_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="userName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="2" NAME="address" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="phone" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>


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)

--导入
INSERT INTO userinfo(userName,address,phone)
SELECT * FROM OPENROWSET(BULK 'G:\test.txt',FORMATFILE='G:\format.xml',FIRSTROW=2) AS T;

--查看数据
SELECT * FROM userinfo;

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

(1 行受影响)
*/
黄_瓜 2009-09-13
  • 打赏
  • 举报
回复
批量导入用这个:   
请参考:
1:不带有条件的从文本导入到数据库:
EXEC master..xp_cmdshell 'BCP bank..sss in E:\实验用数据库\ddd.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'

2:不带有条件的从数据库导出到文本:
EXEC master..xp_cmdshell 'BCP bank..bank out E:\实验用数据库\aaa.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'

3:带有条件的从数据库导出(转换成本)
EXEC master..xp_cmdshell 'BCP "select * from bank..sss where conut<10 " queryout E:\实验用数据库\sss.txt -c -S7824558CF32B4F1\SQL01 -Usa -P520520'
加载更多回复(4)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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