总公司和外地分公司使用的是同软件+同结构的软件和库(sql2000),我怎么使用触发器实现外地分公司的数据实时的能更新到总公司的数据库里。我的(库名  bjpos)  、 (表名  sale)表里的字段(xm,xb,dz,dh,rq)等字段。请高人指教应该怎么写  ???

解决方案 »

  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.   

    不同服务器数据库之间的数据操作--创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名 ', '密码 ' --查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins ' --连接远程/局域网数据(openrowset/openquery/opendatasource) 
    --1、openrowset --查询示例 
    select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --生成本地表 
    select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) --把本地表导入远程表 
    insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
    select *from 本地表 --更新本地表 
    update b 
    set b.列A=a.列A 
     from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
    on a.column1=b.column1 --openquery用法需要创建一个连接 --首先创建一个连接创建链接服务器 
    exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    --查询 
    select * 
    FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    --把本地表导入远程表 
    insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ') 
    select * from 本地表 
    --更新本地表 
    update b 
    set b.列B=a.列B 
    FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
    inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowset 
    SELECT   * 
    FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
    --把本地表导入远程表 
    insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 
    select * from用强制订阅实现数据库同步操作 
    大量和批量的数据可以用数据库的同步机制处理:
    //
    说明:
    为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式
    在客户机器使用强制订阅方式。有疑问联系作者:[email protected]测试通过//
    --1:环境
    服务器环境:
    机器名称: ZehuaDb 
    操作系统:Windows 2000 Server
    数据库版本:SQL 2000 Server 个人版客户端
    机器名称:Zlp
    操作系统:Windows 2000 Server
    数据库版本:SQL 2000 Server 个人版--2:建用户帐号
    在服务器端建立域用户帐号
    我的电脑管理->本地用户和组->用户->建立 
    UserName:zlp
    UserPwd:zlp--3:重新启动服务器MSSQLServer
    我的电脑->控制面版->管理工具->服务->MSSQLServer 服务
    (更改为:域用户帐号,我们新建的zlp用户 .\zlp,密码:zlp) --4:安装分发服务器
    A:配置分发服务器
    工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置)
    B:配置发布服务器
    工具->复制->创建和管理发布->选择要发布的数据库(SZ)->下一步->快照发布->下一步->
    选择要发布的内容->下一步->下一步->下一步->完成
    C:强制配置订阅服务器(推模式,拉模式与此雷同)
    工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->SQL Server数据库->输入客户端服务器名称(ZLP)->使用SQL Server 身份验证(sa,空密码)->确定->应用->确定
    D:初始化订阅
    复制监视器->发布服务器(ZEHUADB)->双击订阅->强制新建->下一步->选择启用的订阅服务器->ZLP->
    下一步->下一步->下一步->下一步->完成--5:测试配置是否成功
    复制监视器->发布服务器(ZEHUADB)->双击SZ:SZ->点状态->点立即运行代理程序
    查看:
    复制监视器->发布服务器(ZEHUADB)->SZ:SZ->选择ZLP:SZ(类型强制)->鼠标右键->启动同步处理
    如果没有错误标志(红色叉),恭喜您配置成功--6:测试数据
    --在服务器执行:
    选择一个表,执行如下SQL
    insert into WQ_NEWSGROUP_S select '测试成功',5复制监视器->发布服务器(ZEHUADB)->SZ:SZ->快照->启动代理程序
                                          ->ZLP:SZ(强制)->启动同步处理去查看同步的 WQ_NEWSGROUP_S 是否插入了一条新的记录测试完毕,通过。
    --7修改数据库的同步时间,一般选择夜晚执行数据库同步处理
    (具体操作略) :D/*
    注意说明:
    服务器一端不能以(local)进行数据的发布与分发,需要先删除注册,然后新建注册本地计算机名称卸载方式:工具->复制->禁止发布->是在"ZehuaDb"上静止发布,卸载所有的数据库同步配置服务器注意:发布服务器、分发服务器中的SQLServerAgent服务必须启动
          采用推模式: "D:\Microsoft SQL Server\MSSQL\REPLDATA\unc" 目录文件可以不设置共享
          拉模式:则需要共享~!*/