CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请教高手,这样的SQL语句该如何写?

楼主jonsonzxw(e代天骄)2003-12-03 08:50:22 在 MS-SQL Server / 基础类 提问

我要导数据,源表为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

相关问题

  • sql语句如何写?
  • help!如何写SQL语句?
  • 如何写SQL语句
  • SQL语句如何写?
  • SQL语句如何写?
  • SQL语句如何写?
  • sql语句的问题!急!!!!(asp+acess),sql语句如何写?
  • sql语句的问题!急!!!!(asp+acess),sql语句如何写?
  • 写SQL语句???
  • 在SQL语句中UPTATE语句该如何写呀?

关键词

  • 数据
  • startdate
  • urid
  • enddate
  • 表
  • webinfo
  • username
  • password
  • bbb
  • 目标

得分解答快速导航

  • 帖主:jonsonzxw
  • pengdali
  • zjcxc
  • wei9625

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo