说明:
我有两个客户数据库,一个中心库,现在需要将两个客户库的[UserActive_Log]的数据上传到中心库统计,3个数据库的表结构都是一样的,但是导入到中心库时,自增长列不能导入,因为2个客户数据库ID会出现重复的
表结构如下:
[ id ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL ,
[ UserId ] [ int ] NOT NULL ,
[ IP ] [ varchar ] ( 16 ) NOT NULL DEFAULT ( '' ),
[ WriteTime ] [ datetime ] NOT NULL DEFAULT ( getdate ())
) ON [ PRIMARY ]
我现在操作如下
1 创建BCP导入格式文件
在DOS下执行
bcp "[CMS_Log].[dbo].[UserActive_Log]" format nul -fd:/Bcp.fmt -c -T -S127.0.0.1
说明: 使用format和-f参数 生成"[CMS_Log].[dbo].[UserActive_Log]" 使用-c格式的BCP格式文件,对于输出数据文件,使用NUL表示空设备响应
d:/Bcp.fmt内容如下
9.0
4
1 SQLCHAR 0 12 "/t" 1 id ""
2 SQLCHAR 0 12 "/t" 2 UserId ""
3 SQLCHAR 0 16 "/t" 3 IP Chinese_PRC_CI_AS
4 SQLCHAR 0 24 "/r/n" 4 WriteTime ""
2 编辑d:/Bcp.fmt,将第1列数据改为空值,编辑后内容如下
9.0
4
1 SQLCHAR 0 0 "" 0 Id ""
2 SQLCHAR 0 12 "/t" 2 UserId ""
3 SQLCHAR 0 16 "/t" 3 IP Chinese_PRC_CI_AS
4 SQLCHAR 0 24 "/r/n" 4 WriteTime ""
3 导出数据,并删除源数据,注意,我只导出了3列
bcp "DELETE [CMS_Log].[dbo].[UserActive_Log] OUTPUT deleted.[UserId] , deleted.[IP] , deleted.[WriteTime] FROM [CMS_Log].[dbo].[UserActive_Log]" format d:/database/dayBackup/20080513/_第一次进入服务器用户日志.txt -c -S127.0.0.1 -T
说明:使用SQL2005的新语法OUTPUT,删除表数据,并且将影响的行输出,这里忽略了第一列自增长,因为合并时不需要.
4 导入到目标数据库
bcp [CMS_Centor_Log].dbo.UserActive_Log in d:/data.txt -fd:/bcp.fmt -T -S127.0.0.1
这样就可以将3列导入到目标表的4个列中