注册
 找回密码
 注册
江西广告网
查看: 386|回复: 0
打印 上一主题 下一主题

SQLServer的几种数据传输方法

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-2-7 10:44:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  本篇文章讨论的是有关数据库之间数据传送的问题,在实际的应用领域里都可以用到,具有实用价值。   例如:公司目前数据库中的信息量不够,需要第三方的数据支持。   这事就有几种情况了:   1、对方直接提供数据库帐号,你可以直接访问(可能性很小)。   2、对方把数据库的信息自动转换成.mdb;dbf;TXT等格式的文件,然后传到你的服务器上。   3、通过一个数据库接口程序,直接插到你的数据库中。   这里还有个问题,无论对方提供的数据的结构是否和我们自己的一样,都不能直接插到我们的库中,这样一旦有问题会破坏我们的数据库,那么我们怎么办呢?   下面的文档会有很好的答案。   具体示例:   本篇文章讨论的是有关数据库之间数据传送的问题,在实际的应用领域里都可以用到,具有实用价值。   例如:公司目前数据库中的信息量不够,需要第三方的数据支持。   这事就有几种情况了:   1、对方直接提供数据库帐号,你可以直接访问(可能性很小)。   2、对方把数据库的信息自动转换成.mdb;dbf;TXT等格式的文件,然后传到你的服务器上。   3、通过一个数据库接口程序,直接插到你的数据库中。   这里还有个问题,无论对方提供的数据的结构是否和我们自己的一样,都不能直接插到我们的库中,这样一旦有问题会破坏我们的数据库,那么我们怎么办呢?   下面的文档会有很好的答案。   具体示例:   本篇文章讨论的是有关数据库之间数据传送的问题,在实际的应用领域里都可以用到,具有实用价值。   例如:公司目前数据库中的信息量不够,需要第三方的数据支持。   这事就有几种情况了:   1、对方直接提供数据库帐号,你可以直接访问(可能性很小)。   2、对方把数据库的信息自动转换成.mdb;dbf;TXT等格式的文件,然后传到你的服务器上。   3、通过一个数据库接口程序,直接插到你的数据库中。   这里还有个问题,无论对方提供的数据的结构是否和我们自己的一样,都不能直接插到我们的库中,这样一旦有问题会破坏我们的数据库,那么我们怎么办呢?   下面的文档会有很好的答案。   一、数据库间的 COPY 导入导出等   利用数据库自带的向导进行数据库之间的传递。   好处:可以在不同的数据库接口间传递数据。   缺点:传递数据的过程中不能对数据进行更改。   技巧:可以利用任务(JOB)定时取需要的数据。   二、利用脚本和任务(JOB)更改处理数据   编写相关的数据库脚本,然后在任务(JOB)中运行。   好处:可以更改插入的内容和插入的位置,使用灵活。   缺点:要自己手写代码。   技巧:可以配合导入导出,利用任务(JOB)实现强大的功能。   具体示例:   用途:把其它数据库服务器中的数据(.mdb;.dbf;sqlserver 等),定时导入自己的数据库中使用,有个问题是“因为我们自己的数据库已经在使用,并且结构和要导入的数据库大不相同,而且原数据库中的某些内容要调整”,所以我们利用了中间数据库。如图:      具体的脚本程序:   /*用途:把第三方提供的数据信息时时导入我们自己的数据库中。   步骤:1、用 DTS (导入导出向导)把数据导入到中间数据库中,要设置任务定时导入。2、编写下面的脚本,然后把它加在 DTS 任务的后一步,即运行完 DTS后在运行此脚本。 */   declare @comid int,@comtitle nvarchar(255) --定义变量   declare test cursor for --定义游标   select DISTINCT comid,comtitle from dbA.dbo.infosociety where   datediff(day,comdate,getdate()) < 1      open test --打开游标   fetch next from test into @comid,@comtitle   while @@fetch_status = 0 --循环取数据   begin   declare @titletemp nvarchar(255)   declare test1 cursor for    select comtitle from dbB.dbo.tb_infogegu where comtitle=@comtitle and datediff(day,comdate,getdate()) = 0    open test1   fetch next from test1 into @titletemp    if( @@fetch_status = 0) --表中该记录已经存在,删除该记录    DELETE FROM dbA.dbo.infosociety WHERE comid=@comid   Else --不存在时,插入该记录    begin    insert into  dbB.dbo.tb_infogegu (comtitle,comcontent,comchannel,comdate,tradetype,stockcode, fromdate)   select top 1 comtitle,comcontent,comchannel,comdate,tradetype,stockcode, fromdate from dbA.dbo.infosociety where comid=@comid order   by comdate    DELETE FROM dbA.dbo.infosociety WHERE comid=@comid    end   close test1     deallocate test1   fetch next from test into @comid,@comtitle   end    DELETE FROM dbA.dbo.infosociety    close test    deallocate test   GO <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表