文本导入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分钟
...全文
1167 24 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
有用,好东西,,找了好长时间了 。。
冰岛男孩 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,591

社区成员

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

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