请教高手,这样的SQL语句该如何写?
我要导数据,源表为webinfo,目标表有两个(T1,T2)或更多的表.
webinfo 中的username ,password 两列的数据 要导到T1表的username,password 中,同时要将webinfo的startdate,enddate 导到T2表的startdate,enddate字段中,而 两个目标表之间是通过 urid 联系在一起的。也就是说,对于T1表的urid是自动编号的主键。
比如说:
源表Webinfo有如下数据:
username password startdate enddate
aaa aaa 2001-2-1 2003-1-31
bbb bbb 2001-10-5 2002-6-4
... ....
导数据后,T1表的内容为:
urid username password
1 aaa aaa
2 bbb bbb
... ...
T2表的内容为:
urid startdate enddate
1 2001-2-1 2003-1-31
2 2001-10-5 2002-6-4
... ...
也就是说要将源表的数据字段拆分分别导到不同的目标表中,且目标表中的记录之间是通过一定字段相关的。
先谢了!
问题点数:100、回复次数:17Top
1 楼pengdali()回复于 2003-12-03 08:53:01 得分 40
insert t1 (username,[password]) select username,[password] from Webinfo
insert t2 (startdate,enddate) select startdate,enddate from WebinfoTop
2 楼pengdali()回复于 2003-12-03 08:54:23 得分 0
insert t1 (username,[password]) select username,[password] from Webinfo order by username,[password],startdate,enddate
insert t2 (startdate,enddate) select startdate,enddate from Webinfo order by username,[password],startdate,enddateTop
3 楼zjcxc(邹建)回复于 2003-12-03 08:57:26 得分 40
--分开导,并加上排序语句保证导入的数据顺序一致
insert t1 (username,[password])
select username,[password]
from Webinfo
order by username,password],startdate,enddate
insert t2 (startdate,enddate)
select startdate,enddate
from Webinfo
order by username,[password],startdate,enddate
Top
4 楼zjcxc(邹建)回复于 2003-12-03 08:59:37 得分 0
--如果你的t1,t2表的userid不是自增列,可以用临时表:
--为导数据准备临时表
select id=identity(int,1,1),* into #t from Webinfo
--导入数据到t1,t2
insert t1 (userid,username,[password])
select id,username,[password] from #t
insert t2 (userid,startdate,enddate)
select id,startdate,enddate from #t
--删除临时表
drop table #t
Top
5 楼jonsonzxw(e代天骄)回复于 2003-12-03 09:02:44 得分 0
T2表的urid是来自T1表的啊Top
6 楼jonsonzxw(e代天骄)回复于 2003-12-03 09:05:35 得分 0
也就是说T2表的urid的值要等T1表的urid生成之后,用T1表的然后结合webinfo 相应的startdate和enddate,一并导到T2表中Top
7 楼pengdali()回复于 2003-12-03 09:18:26 得分 0
select IDENTITY(int, 1,1) ID,* into #临时表 from Webinfo
SET IDENTITY_INSERT t1 ON
insert t1 (username,[password]) select id,username,[password] from #临时表
SET IDENTITY_INSERT t1 OFF
SET IDENTITY_INSERT t2 ON
insert t2 (startdate,enddate) select id,startdate,enddate from #临时表
SET IDENTITY_INSERT t2 OFF
drop table #临时表Top
8 楼pengdali()回复于 2003-12-03 09:19:57 得分 0
select IDENTITY(int, 1,1) ID,* into #临时表 from Webinfo
SET IDENTITY_INSERT t1 ON
insert t1 (urid,username,[password]) select id,username,[password] from #临时表
SET IDENTITY_INSERT t1 OFF
SET IDENTITY_INSERT t2 ON
insert t2 (urid,startdate,enddate) select id,startdate,enddate from #临时表
SET IDENTITY_INSERT t2 OFF
drop table #临时表Top
9 楼zjcxc(邹建)回复于 2003-12-03 09:26:38 得分 0
T1表的结构是怎样的? urid是什么类型,通过什么方式生成?Top
10 楼jonsonzxw(e代天骄)回复于 2003-12-03 09:29:38 得分 0
T1表的urid是自增的整形,T2的urid也是整形,但是来自于T1Top
11 楼jonsonzxw(e代天骄)回复于 2003-12-03 09:31:23 得分 0
还有webinfo里面的id跟后两个表中的urid没任何关系
Top
12 楼jonsonzxw(e代天骄)回复于 2003-12-03 09:40:05 得分 0
不知各位明白我的意思没有?Top
13 楼zjcxc(邹建)回复于 2003-12-03 09:57:23 得分 0
--那这个方法就可以啦:
--为导数据准备临时表
select id=identity(int,1,1),* into #t from Webinfo
--导入数据到t1,t2
set identity_insert t1 on
insert t1 (userid,username,[password]) select id,username,[password] from #t
set identity_insert t2 on
insert t2 (userid,startdate,enddate) select id,startdate,enddate from #t
set identity_insert t2 off
--删除临时表
drop table #tTop
14 楼wei9625(emily)回复于 2003-12-03 10:02:26 得分 20
如果username是唯一的,还可以这样做
insert t1 (username,[password]) select username,[password] from Webinfo
insert t2 (urid,startdate,enddate) select urid,startdate,enddate from Webinfo a,t1 b where a.username=b.username
Top
15 楼jonsonzxw(e代天骄)回复于 2003-12-03 10:20:51 得分 0
谢谢,我试试!
能不能在导完T1表之后,用T1表的urid的然后结合webinfo 相应的startdate和enddate,一并导到T2表中??Top
16 楼zjcxc(邹建)回复于 2003-12-03 10:36:51 得分 0
--如果你的webinfo表中的username是不重复的,可以用:
insert t1 (username,[password]) select username,[password] from Webinfo
set identity_insert t2 on --如果t2表中的urid不是自增列,就不需要此句
insert t2 (urid,startdate,enddate) select b.urid,a.startdate,a.enddate from Webinfo a join t1 b on a.username=b.usernameTop
17 楼jonsonzxw(e代天骄)回复于 2003-12-03 10:57:39 得分 0
谢谢几位高手相助,结帐Top




