CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

100分紧急求一SQL语句

楼主window221()2005-08-19 13:09:35 在 MS-SQL Server / 基础类 提问

由于公司购买了一部发客户资料,现需要和自己公司的结合起来  
  购买资料:会员表members和会员发布的产品表products  
   
  购买的会员ID号自己的会员ID号都是自动递增的  
  如果要把购买会员表导过来再导产品表,那么势必造成产品所属的会员发生改变  
   
  其实我的意思就是想把会员导过来,同时发布的产品(产品表中)的ID号也对应改变  
  做到一一对应,这样的SQL语句应该怎么写?  
  问题点数:100、回复次数:8Top

1 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-08-19 13:11:47 得分 0

--好抽象,能不能把业务抽象出来描述!Top

2 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-08-19 13:25:57 得分 40

先把购买资料中的会员表members和会员发布的产品表products数据都导入到本地数据库的两个临时表#members和#products,#members不保留自增属性  
   
  --将临时表#members中的MembersID转为本地MembersID,在原ID基础上加上本地最大的MembersID编号  
  update   #members     set   MembersID   =   MembersID+(SELECT   MAX(ID)   FROM   members     /*本地的会员数据表*/   )  
   
  --同上  
  update   #products   set   MembersID   =   MembersID+(SELECT   MAX(ID)   FROM   members     /*本地的会员数据表*/   )  
   
  --将临时表数据导入本地表  
  SET   IDENTITY_INSERT   ON  
  GO  
   
  insert   into   members     /*本地的会员数据表*/    
  select   *   from   #members  
   
  insert   into   products   /*本地的产品信息表*/  
  select   *   from   #products  
  GO  
   
  SET   IDENTITY_INSERT   OFF  
  GO  
   
  --修改本地members表的自增种子为当前表最大ID号+1  
  declare   @MembersID   INT,@var   varchar(8000)  
  select   @MembersID   =   max(MembersID)+1   from   members     /*本地的会员数据表*/    
  set   @var   =   'DBCC   CHECKIDENT   (members,   RESEED,   '+cast(@MembersID   varchar(20))+')'  
  exec(@var)Top

3 楼window221()回复于 2005-08-19 13:27:39 得分 0

看来我说的不够清,我再举个例子吧  
  例如:购买会员表members,购买产品表products  
  member_id都是自动递增的  
   
   
  members有数据  
  member_id       field1   ...  
  5                         张三     ...  
   
  products有数据  
  product_id     member_id     field1     ...  
  1                           5                     null  
  2                           5                     null  
  3                           5                     null  
  (备注:说明张三发布了3条产品)  
   
  我们自己的会员表my_members,产品表my_products  
   
  my_members有数据  
  member_id       field1   ...  
  5                         李四     ...  
   
  my_products有数据  
  product_id     member_id     field1     ...  
  1                           5                     null  
  (备注:说明李四发布了1条产品)  
  *************************************************  
  我如果导过来后就变成了  
  my_members就变成  
  member_id       field1   ...  
  5                         李四     ...  
  6                         张三     ...  
   
   
  my_products就变成  
  product_id     member_id     field1     ...  
  1                           5                     null  
  2                           5                     null  
  3                           5                     null  
  4                           5                     null  
   
  这样岂不是都变成了李四发的产品了  
  我想正确的结果  
  my_products  
  product_id     member_id     field1     ...  
  1                           5                     null  
  2                           6                     null  
  3                           6                     null  
  4                           6                     null  
   
  ====================================================  
  不知道是否明白我的意思Top

4 楼hglhyy(為人民币服务!)回复于 2005-08-19 13:29:34 得分 0

你得把你有表结构和你买的资料的表结构帖出来!     这样才可能合并。  
   
  什么公司啊,可以进行客户资料的买卖??Top

5 楼hglhyy(為人民币服务!)回复于 2005-08-19 13:40:36 得分 20

这么快啊,我还以为我是二楼呢!  
   
  教你一个最简单的方法!(自增的是单纯的数字)  
   
  把你买的表members.member_id     和products.member_id   都加上你自己表中的最大的member_id  
   
   
  如:你的表中member_id   最大为1000,那么把买的表中的member_id   通过update都加上1000后,再反插过来到你有表中就OK了!  
         
   
  SQL:  
            update   members   set   member_id   =member_id   +   (select   max(member_id)   from   my_members)  
            update   products   set   member_id   =member_id   +   (select   max(member_id)   from   my_members)  
   
        insert   into   my_members   select   *   from   members  
        inset   into   my_products   select   *   from   products  
   
   
  Top

6 楼window221()回复于 2005-08-19 13:44:11 得分 0

感谢两位高人:  
    libin_ftsafe(子陌红尘)  
    hglhyy(查無此人)  
   
  你们的两个思路差不多,应该可以解决我的问题了,非常感谢,但暂不结贴,  
  明天我彻底解决就结,我怕还有问题Top

7 楼rivery(river)回复于 2005-08-19 13:56:47 得分 40

/*  
  处理思想:导入的数据按照负数存放。不影响原来的id自增。  
                  如果外部表仍然需要数据增长,修改其自增为(-1,-1),并将所有相关的id都update为-1  
  这样两个id永远不会重复。  
  myTableName:你自己的表  
  otherTableName:外面的表  
  */  
  set   identity_insert   myTableName   on  
  insert   into   myTableName(id,...)  
  select   -id,...  
  from   otherTableName  
  set   identity_insert   myTableName   off  
   
  update   otherTableName_products  
  set   id=-id--otherTableName对应的idTop

8 楼window221()回复于 2005-08-20 13:32:55 得分 0

问题已经解决,当时正用子陌的方法,但修改好多程序  
   
  后来采用底楼那位朋友的处理方法,感觉修改的不多Top

相关问题

  • 紧急求救一sql语句。
  • 一SQL语句?
  • SQL语句紧急求教
  • 紧急求解:下面几个SQL语句能否合并成一条语句
  • 一个SQL语句
  • 一个SQL语句?
  • 一条sql语句
  • 求一sql语句!
  • 求一sql语句!!
  • 求一sql语句

关键词

  • 修改
  • 数据
  • 资料
  • 解决
  • membersid
  • members
  • 表
  • mytablename
  • 会员
  • 数据表

得分解答快速导航

  • 帖主:window221
  • libin_ftsafe
  • hglhyy
  • rivery

相关链接

  • SQL Server类图书

广告也精彩

反馈

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