先把购买资料中的会员表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
GOinsert into members /*本地的会员数据表*/
select * from #membersinsert into products /*本地的产品信息表*/
select * from #products
GOSET 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)
update #members set MembersID = MembersID+(SELECT MAX(ID) FROM members /*本地的会员数据表*/ )--同上
update #products set MembersID = MembersID+(SELECT MAX(ID) FROM members /*本地的会员数据表*/ )--将临时表数据导入本地表
SET IDENTITY_INSERT ON
GOinsert into members /*本地的会员数据表*/
select * from #membersinsert into products /*本地的产品信息表*/
select * from #products
GOSET 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)
例如:购买会员表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_productsmy_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====================================================
不知道是否明白我的意思
如:你的表中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
libin_ftsafe(子陌红尘)
hglhyy(查無此人)你们的两个思路差不多,应该可以解决我的问题了,非常感谢,但暂不结贴,
明天我彻底解决就结,我怕还有问题
处理思想:导入的数据按照负数存放。不影响原来的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 offupdate otherTableName_products
set id=-id--otherTableName对应的id