此博文已移至爬不稳独立博客:www.pubwin2009.net
连接:http://www.pubwin2009.net/index.php/post/15.html
我们说下过程(这里,我们要求两个网吧的服务端版本号基本一致,并且操作时停止pubwin服务,开启sqlserver服务,我们把要加入的网吧称之为新网吧):
1,备份,一定要备份好数据库。
2,符加新网吧数据库,如果要附加的新网吧的数据库是放在c:\newdb\的,t-sql命令如下:
sp_attach_db @dbname = N'newdb',
@filename1 = N'C:\newdb\local_data.mdf',
@filename2 = N'C:\newdb\local_log.ldf'
3,我们统计一下,新网吧和旧网吧的会员个数和会员数各是多少:
select count(*),sum(balance/100) from mem_localmemberbaseinfo
两个数据库切换,都做一下统计。我这里两个试验数据库统计如下,目前网吧会员数:3727 钱数:25793;要加入的网吧会员数:13004 钱数:69346
4,我们把要加入网吧新库里的会员表导入到目前数据库的新表里(这里我们把这个新表命名为member):
select * into local.dbo.member from newdb.dbo.mem_localmemberbaseinfo
5,现在我们看一下,目前库里member表里的会员数是不是和刚才的会员数相等,确认数据是否导入
select count(*),sum(balance/100) from member
我这边查询出来的数字和刚才查询新网吧的是一样的.
6,现在我们附加的newdb数据库就没用了,直接把他分离了。
sp_detach_db @dbname=N'newdb'
7,我们来查询一下,我们新的网吧会员表里有没有和我们现在的会员表里重复的会员
select uniqueid from member where uniqueid in
(select uniqueid from mem_localmemberbaseinfo)
我这边由于是测试数据库,查出3670条重复的。。好多好多。。
8,首们对这些重复的会员做一个备份,我们把这些会员备份到一个新表里,表名cfmemberbak:
select * into cfmemberbak from member where uniqueid in
(select uniqueid from mem_localmemberbaseinfo)
9,接下来,分两种情况1,把我们重复的会员的钱和积分直接加到目前的数据库里,2,把这些重复的会员,做成一个txt备份备用,不把钱加到现在的会员里面。
我们先做加钱的:
update mem_localmemberbaseinfo set
balance=mem_localmemberbaseinfo.balance+a.balance,
score=mem_localmemberbaseinfo.score+a.score
from member as a
where mem_localmemberbaseinfo.uniqueid=a.uniqueid
这样就把重复会员的钱和积分加到当前的数据库中了,不加积分的话可以把score,那句去掉。
然后我们做txt备份的,我们刚已经把重复会员的信息备份了,所以, 这个比较简单,在cmd下运行:
C:\>osql -E -d local -Q "select uniqueid,balance/100 as money from cfmemberbak where balance>0" -o c:\cfmemberbak.txt
请自行将上面cmd命令 “-E”改成:“ -U netcafe -P 数据库密码”,这里我们只筛选有钱的会员。
10,下面我们将member表里和现在会员表里卡号重复的会员删掉:
delete member where uniqueid in(select uniqueid from mem_localmemberbaseinfo)
11,由于id是从0开始自增的,并且是唯一的,所以我们要把member 表里的id改得和现在会员表里的id不同,原理上我们给id加上目前会员的个数就可以了(尽量大一点),这里我们加20000
update member set id=id+20000
13,我们把member表的数据,插入到我们目前的会员表里:
insert into mem_localmemberbaseinfo select * from member
14,这里基本工作上就算是结束了,下面我们核对一下钱是不是等于以前两个网吧的钱数相加。
1> select sum(balance/100) from mem_localmemberbaseinfo
2> go --------------------
95139
我这里,总金额95139,没问题,这里就结束了