[原创]批量数据上传(access到sql server。sql server到sql server)

批量数据上传(access到sql server。sql server到sql server)

一个服务系统,一般都有两个平台(服务平台,数据加工平台)。数据加工可以单机或者联机操作。这中间涉及到了两个数据整合上传问题。一是定期将单机的数据上传到数据加工平台。二是定期将数据加工平台的数据上传到服务器上。整个上传过程涉及到了两个核心过程:(1):怎样判断该数据是否上传(2) 主表上传后,如果主表主键发生改变,怎样让子表的外键也相应的改变。

本文中数据加工以access数据库为基础的,包括单机版,网络版(通过odbc连在sql1上)。服务平台建在sql2上。程序由存储过程完成。用OPENROWSET来调用access。以下简单谈下我对这两个核心问题的解决思路。

一. 上传前,如果对表建立了关系,必须先禁用约束。
set @sql='declare #tbc cursor for select name,tbname=object_name(parent_obj)
 from '+@n_dbname+'..sysobjects where xtype in(''C'',''F'')'
exec(@sql)
declare @name sysname,@tbname sysname
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] NOCHECK CONSTRAINT ['+@name+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc
完成后恢复约束
open #tbc
fetch next from #tbc into @name,@tbname
while @@fetch_status=0
begin
 set @sql='alter table '+@n_dbname+'..['+@tbname+'] CHECK CONSTRAINT ['+@name+']'
 exec(@sql)
 fetch next from #tbc into @name,@tbname
end
close #tbc
deallocate #tbc

二. 怎样判断表中的数据是否上传。设计表时不可能对每个表加上一个字段来标识是否已上传,只要对主表加个字段标识是否上传,然后通过游标,由关系找出主表下每个表的相关记录,依次上传。不过这样速度会降低,没办法的事拉~~~

三. 由于数据加工中为了方便输入,对很多表都是以自动编号来标识的。上传后,很多主表的主键必发生相应的改变,这就要求子表的外键值必须发生改变与之对应。
   基本思路:先上传主表,然后将子表中的相关记录提出放在临时表中,更新外键,再将临时表上传。(对复杂关系,需对主表建立一个新旧id对应表)
   只能借用临时表来更新,如果直接在子表更新,会同时把已经上传的数据更新。

(只谈思路cdfuwu@163.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值