100分紧急求一SQL语句
由于公司购买了一部发客户资料,现需要和自己公司的结合起来
购买资料:会员表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




