关于insert into和bulk insert的问题

ggsysy 2009-12-03 01:17:17
今天一定要把这2个东东给摆平,都弄了我好久了,实在纳闷!
这样吧,比如表A有字段a,b,c,d,e。
88.TXT文本格式内容是(分隔符是tab)
a c d
1 2 3
2 3 4
4 5 6
我现在要把txt文档的内容插入到表A。
运行结果:
a b c d e
1 null 2 3 null
2 null 3 4 null
4 null 5 6 null

数据库用的是SQL SERVER2000
1、不管用什么方法,只用一条SQL语句能实现不?
2、数量比较多,用insert into和bulk insert是否可以实现,哪个效率比较高?如果可以实现,具体代码写出来。




...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
忆轩辕 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liangck 的回复:]
G:\format.fmt

XML code8.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

XML codeuserName,address,phone
hua,湖南,5971898
SQL code--SQL SERVER
--建表CREATETABLE userinfo(idintidentity,userNamevarchar(20),
passvarchar(20),addressvarchar(100),phonevarchar(20),
emailvarchar(128),registerTimedatetime)--导入BULKINSERT userinfoFROM'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 行受影响)*/


[/Quote]


顶一下
lrjt1980 2009-12-03
  • 打赏
  • 举报
回复
insert into B (a,b,c,d,e) select (a,b=null,c,d,e=null) from A
dawugui 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 guangguang2007 的回复:]
今天一定要把这2个东东给摆平,都弄了我好久了,实在纳闷!
这样吧,比如表A有字段a,b,c,d,e。
88.TXT文本格式内容是(分隔符是tab)
a c d
1 2 3
2 3 4
4 5 6
我现在要把txt文档的内容插入到表A。
运行结果:
a  b  c d  e
1 null 2 3 null
2 null 3 4 null
4 null 5 6 null

数据库用的是SQL SERVER2000
1、不管用什么方法,只用一条SQL语句能实现不?
2、数量比较多,用insert into和bulk insert是否可以实现,哪个效率比较高?如果可以实现,具体代码写出来。



[/Quote]
我记得告诉过你要使用中间表.
liangCK 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guangguang2007 的回复:]
引用 5 楼 liangck 的回复:
你不会去看里面的链接?

肯定看了啊,问题是还没根本解决啊。用insert into的话,txt文档不会识别列,把几个字段都合为一个字段了。用bulk insert的话,就不能选择插入的列。
[/Quote]

这也叫看了?
水族杰纶 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 guangguang2007 的回复:]
引用 5 楼 liangck 的回复:
你不会去看里面的链接?

肯定看了啊,问题是还没根本解决啊。用insert into的话,txt文档不会识别列,把几个字段都合为一个字段了。用bulk insert的话,就不能选择插入的列。
[/Quote]
參考2樓代碼
借住中間表
ggsysy 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liangck 的回复:]
你不会去看里面的链接?
[/Quote]
肯定看了啊,问题是还没根本解决啊。用insert into的话,txt文档不会识别列,把几个字段都合为一个字段了。用bulk insert的话,就不能选择插入的列。
liangCK 2009-12-03
  • 打赏
  • 举报
回复
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 行受影响)
*/


liangCK 2009-12-03
  • 打赏
  • 举报
回复
你不会去看里面的链接?
ggsysy 2009-12-03
  • 打赏
  • 举报
回复
呵呵,链来链去链到我发的贴去了。。
liangCK 2009-12-03
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20091203/11/b055b00d-326a-4284-b631-e6cc1ff4027c.html
aimee_99 2009-12-03
  • 打赏
  • 举报
回复
if object_id('tempdb..#')is not null drop table #
go
create table #(a varchar(10),c varchar(10),d varchar(10))
bulk insert #
from 'E:\Test.txt'
with(
FIELDTERMINATOR = ' ',
ROWTERMINATOR = '\n'

)
insert ta(a,c,d)select * from #
--小F-- 2009-12-03
  • 打赏
  • 举报
回复
--参考
如何使用BCP导出格式文件

BCP不仅可以根据表、视图导入导出数据,还可以配合格式文件对导入导出数据进行限制。格式文件以纯文本文件形式存在,分为一般格式和xml格式。用户可以手工编写格式文件,也可以通过BCP命令根据表、视图自动生成格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T'

上述命令将currency表的结构生成了一个格式文件currency_format1.fmt,下面是这个格式文件的内容。

9.0
3
1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate

这个格式文件记录了这个表的字段(共3个字段)类型、长度、字符和行分割符和字段名等信息。

BCP还可以通过-x选项生成xml格式的格式文件。

EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'
xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。

34,590

社区成员

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

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