即 比如有两家店,都各自有一台电脑,都装了数据库SQL2000
分店数据库的数据上传到总店的数据库.如何上传?(只要分店数据上传,总店数据库只是用来查询而已)我做的是C/S的系统,由于两家店的距离比较长,所以想用定时传输或者自己手动传输有例子的话最好

解决方案 »

  1.   

    定时传输用作业+链接服务器 ...手动传输用链接服务器
    --参考: 
    /* 
    作者:邹建 
    */ /*--同步两个数据库的示例 有数据 
    srv1.库名..author有字段:id,name,phone, 
    srv2.库名..author有字段:id,name,telphone,adress 要求: 
    srv1.库名..author增加记录则srv1.库名..author记录增加 
    srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新 
    --*/ --大致的处理步骤 
    --1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步 
    exec sp_addlinkedserver  'srv2','','SQLOLEDB','srv2的sql实例名或ip' 
    exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码' 
    go --2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动 
    我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动 
    go 
    --然后创建一个作业定时调用上面的同步处理存储过程就行了 企业管理器 
    --管理 
    --SQL Server代理 
    --右键作业 
    --新建作业 
    --"常规"项中输入作业名称 
    --"步骤"项 
    --新建 
    --"步骤名"中输入步骤名 
    --"类型"中选择"Transact-SQL 脚本(TSQL)" 
    --"数据库"选择执行命令的数据库 
    --"命令"中输入要执行的语句: exec p_process 
    --确定 
    --"调度"项 
    --新建调度 
    --"名称"中输入调度名称 
    --"调度类型"中选择你的作业执行安排 
    --如果选择"反复出现" 
    --点"更改"来设置你的时间安排 
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. 
    --3.实现同步处理的方法2,定时同步 --在srv1中创建如下的同步处理存储过程 
    create proc p_process 
    as 
    --更新修改过的数据 
    update b set name=i.name,telphone=i.telphone 
    from srv2.库名.dbo.author b,author i 
    where b.id=i.id and 
    (b.name <>i.name or b.telphone <>i.telphone) --插入新增的数据 
    insert srv2.库名.dbo.author(id,name,telphone) 
    select id,name,telphone from author i 
    where not exists( 
    select * from srv2.库名.dbo.author where id=i.id) --删除已经删除的数据(如果需要的话) 
    delete b 
    from srv2.库名.dbo.author b 
    where not exists( 
    select * from author where id=b.id) 
    go 
      

  2.   

    一项任务,想要实现每天凌晨0点系统自动把线上数据库中exchange里企业用户信息表、邮件收发表、短信发送视图和彩信发送视图的数据传到北京机房服务器(不是局域网)上的qyyx库里,每天一个表,规格:表名+日期。
    操作:1)在北京机房服务器建存储过程,每天生成一个新表。
    CREATE PROCEDURE [dbo].[VMMList_creatbyday]
    AS
    BEGIN
    DECLARE @TableName varchar(64)
    set @TableName = 'VMMList_'+REPLACE(Convert(varchar(10),DATEADD(day, -1, getdate()),20),'-','')
    print(@TableName)
    exec('select * into '+@TableName+'  from dbo.VMMList_20090826 where 1<>1')
    END
    2):建立作业,每天凌晨0点调用这个存储过程。
    exec VMMList_creatbyday
    3):在线上数据库中exchange上建存储过程,往北京机房服务器发送数据。
    USE [exchange]
    GO
    /****** 对象:  StoredProcedure [dbo].[VMMList_sendbyday]    脚本日期: 08/26/2009 11:33:04 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[VMMList_sendbyday]
    AS
    BEGIN
     
        DECLARE @TableName varchar(64)
    set @TableName = 'VMMList_'+REPLACE(Convert(varchar(10),DATEADD(day, -1, getdate()),20),'-','')
    --print(@TableName)
    declare @sql nvarchar(1000)
    set @sql='insert into OPENDATASOURCE(''SQLOLEDB'', ''Data Source=’IP地址‘;User ID=用户名;Password=密码'').qyyx.dbo.['+ @TableName+'] select * from [exchange].dbo.[VMMList]'
    exec (@sql)
     
    END
    4):建立作业,每天凌晨0点10分调用存储过程。
    exec  vSmsList_sendbyday
    5)今天上午经检查实现了三个表的自己传输,添补修正1-9号的SQL如下。现在vsmslist执行时总是提示:消息8152,级别16,状态10,第1 行
    将截断字符串或二进制数据。语句已终止。问题尚未解决。
    select  count(*) from SYMails_20090826
    insert into VMMList_20090826 select * from VMMList_20090709 where insdate<'2009-08-26 00:00:00.000'
     
    6):解决作业不能自动执行的BUG,经查是因建立作业的操作员权限不足。
    7):解决二进制报错bug,加了一个连接限制,当每日变更数据不超过1000条就不会报错,目前每天变更数据为0-15条,但是没有问题,日后当用户大批量导入时,可通过脚本手动执行。
    8:修正了以前的数据,原来局方工作人员想要ECEntUser企业用户信息表每天传所有的,其他三个表传当天的数据,加了日期的限制,脚本如下:
             set @sql='insert into OPENDATASOURCE(''SQLOLEDB'', ''Data Source=IP地址,端口号;User ID=用户名;Password=密码'').qyyx.qyyx.['+ @TableName+'] 
    select * from [exchange].dbo.[symails] where  convert(varchar(10),msgdate,120)=Convert(varchar(10),DATEADD(day, -3, getdate()),20)'
             exec (@sql)
      

  3.   

    根据需求自己做DTS任务包,然后再用dtsrun执行该DTS任务,若将其加入到计划任务中也便实现了定时传输。
      

  4.   

    大公司一般都有专线,有专线的话可以建链接服务器
    如果没有专线的话,那就传递数据文件吧,在分店先导出到txt文件,然后在服务器导入