如何让BCP导入与目标表格式不一致的数据

说明:
我有两个客户数据库,一个中心库,现在需要将两个客户库的[UserActive_Log]的数据上传到中心库统计,3个数据库的表结构都是一样的,但是导入到中心库时,自增长列不能导入,因为2个客户数据库ID会出现重复的
表结构如下:

CREATE   TABLE   [ dbo ] . [ UserActive_Log ] (
    
[ 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个列中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值