此博文已移至爬不稳独立博客: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,没问题,这里就结束了

05-11 02:10