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

本文介绍了一种从两个客户数据库向中心数据库批量迁移特定表数据的方法,重点解决了自增长ID导致的数据冲突问题,通过BCP工具及SQL语法实现了高效的数据导入。

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

CREATE TABLE [dbo].[UserActive_Log](
    
[id] [int] IDENTITY(1,1NOT NULL,
    
[UserId] [int] NOT NULL,
    
[IP] [varchar](16NOT 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个列中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值