关于两个库一对多表的数据同步的问题

wang520d 2008-08-27 01:17:48
有A,B两数据库
A库中有一表每月生成一次的表 当前是8月就生成表名:CTI_2008_08
结构如下:
MustID callID name username tel
1 1 王某 js001 13141250137

假如到了9月就生成
CTI_2008_09
MustID callID name username tel
1 1 张某某 js001 1355555555



B库有表
CTI_Missing
mustid callid name username tel
1 1 王某 js001 13141250137
2 2 张某某 js001 1355555555
问题:现在想实现这两个库中的两个表的数据同步

...全文
225 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangliuxiaowu 2008-08-28
  • 打赏
  • 举报
回复
本人现在在搞WPF,收藏了诸多C#, .NET, 面试总结,以及WPF的经典电子书,下面的全部可以下载,献给

各位。NET网友。(很大一部分是网上很难找到的,本人总结之精华,CSDN上注册即可获得20分,已注册的话随便下)
下载地址:http://download.csdn.net/user/yangliuxiaowu/All/5

CSharp经典书,绝对牛,本人珍藏。
C# 精华,绝对的精华。5分绝对值!值!
NET框架设计_李建忠(译) 5
你必须知道的.NET 5
WPF经典之作
C#[1].Net网络程序开发-Socket篇
VS2008新特性
C#25个问题
面试中会问的题目
面试机理性问题
面试English
C#面试大全
C#新内容
区别C#基础
最经典的题目_面试人
面试机理性东西
C#排序查找
字符串操作总结
effectiveC++_中文第二版_酷勤网提供下载
Windows+Presentation+Foundation概要
WPF经典之作ch04
WPF程序设计指南(有书)
applications_code_markup
Programming .NET Security
Microsoft_.NET_Framework_2.0_Web-Based_Client_Development
Dot.NET.Test.Automation.Recipes.A.Problem.Solution.Approach
Microsoft_.NET_Framework_2.0_Application_Development_Foundation
25C#总结,3分绝对值。
wpf+3d
Foundations of WPF
Programming Windows Presentation Foundation
Wpf入门白皮书
XAML in a Nutshell.chm
程序员面试宝典
Data Structures Using C# (Mar 2007
hyde100 2008-08-28
  • 打赏
  • 举报
回复
11
wang520d 2008-08-27
  • 打赏
  • 举报
回复
问题:求一触发器 该触发器作用的表名为动态的 规则:用字符串 ‘CTI_’+当前年份+当前月份(两位);
如:
CREATE TRIGGER [dbo].[T_LeaguerInfos_Log]
ON CTI_ YEAR(GETDATE()) _ MONTH(GETDATE())--这个名字部分怎么弄?
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hyde100 的回复:]
引用 16 楼 wang520d 的回复:
引用 15 楼 hyde100 的回复:
打开数据库->Sql Server Agent->Jobs->右键:New job->
1)Steps:填写你写的语句。
2)Schedules:选择Job执行的时间
楼主尝试着操作一下


我知道怎么 添加任务计划 关键是我不会怎么去写这个触发器

这不是触发器,而是Job,你可以选择是每月的几号几点几分去执行,而不是靠其它表来触发。
还有,你这个A表里的原始数据是哪里来的?

===========
这样是不行的。。。。只能用任务计划去给A库的表加上一个触发器。。。因为A库中的表的数据同步到B库中的表的实时性比较高 当A库中的表有数据增加我就用触发器往B库中的表插入一条数据 ,,,,使用问题关键还是在于这个触发器怎么写。。。

[/Quote]

hyde100 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wang520d 的回复:]
引用 15 楼 hyde100 的回复:
打开数据库->Sql Server Agent->Jobs->右键:New job->
1)Steps:填写你写的语句。
2)Schedules:选择Job执行的时间
楼主尝试着操作一下


我知道怎么 添加任务计划 关键是我不会怎么去写这个触发器

这不是触发器,而是Job,你可以选择是每月的几号几点几分去执行,而不是靠其它表来触发。
还有,你这个A表里的原始数据是哪里来的?
[/Quote]
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hyde100 的回复:]
打开数据库->Sql Server Agent->Jobs->右键:New job->
1)Steps:填写你写的语句。
2)Schedules:选择Job执行的时间
楼主尝试着操作一下
[/Quote]

我知道怎么 添加任务计划 关键是我不会怎么去写这个触发器
hyde100 2008-08-27
  • 打赏
  • 举报
回复
打开数据库->Sql Server Agent->Jobs->右键:New job->
1)Steps:填写你写的语句。
2)Schedules:选择Job执行的时间
楼主尝试着操作一下
hyde100 2008-08-27
  • 打赏
  • 举报
回复
你用的是2005吗?
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hyde100 的回复:]
可以这样理解吗,B库中CTI_Missing是A库中CTI_2008_08/CTI_2008_09等每个月数据的汇总?
[/Quote]

对头。。。
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hyde100 的回复:]
这里只有原理,你再查查相关的知识。
原理是:在一个数据库中操作另外一个数据库
1)登录A数据库的用户必须有操作B数据库的权限
2)操作B数据库时加上整个路径,就能吧B数据库当作A数据库一样来操作了
exp:在A数据库中查询B数据库
SELECT * FROM B.dbo.table1
[/Quote]

我知道您的意思 如果是简单的 A库中一表同步B库中一表 我相信一个触发器就能搞定。。。。
但是A库中的那张表是每月生成一次的。。。这样就不好去做触发器。。。当然像上面楼的朋友说的用JOB能动态给动态生成的动态表做上触发器 但是我不懂怎么弄,,数据库知识不好。。。
sxn19811006 2008-08-27
  • 打赏
  • 举报
回复
触发器
hyde100 2008-08-27
  • 打赏
  • 举报
回复
可以这样理解吗,B库中CTI_Missing是A库中CTI_2008_08/CTI_2008_09等每个月数据的汇总?
水族杰纶 2008-08-27
  • 打赏
  • 举报
回复
不同服务器数据库之间的数据操作

--创建链接服务器
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
--把本地表导入远程表

hyde100 2008-08-27
  • 打赏
  • 举报
回复
这里只有原理,你再查查相关的知识。
原理是:在一个数据库中操作另外一个数据库
1)登录A数据库的用户必须有操作B数据库的权限
2)操作B数据库时加上整个路径,就能吧B数据库当作A数据库一样来操作了
exp:在A数据库中查询B数据库
SELECT * FROM B.dbo.table1
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
同步方向?
[/Quote]

A库到B库。。。。
A库中先有数据,有一条就更新一条到B库
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hyde100 的回复:]
A数据库操作的时候同时操作B数据库不就OK了?
[/Quote]

哎。。。。无语
wang520d 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hyde100 的回复:]
引用 2 楼 utpcb 的回复:
做JOB 咯写好动态SQL 定时执行

这样最好,写好了语句也就省去了麻烦了
[/Quote]

具体实例有么。。。
hyde100 2008-08-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 utpcb 的回复:]
做JOB 咯写好动态SQL 定时执行
[/Quote]
这样最好,写好了语句也就省去了麻烦了
hyde100 2008-08-27
  • 打赏
  • 举报
回复
A数据库操作的时候同时操作B数据库不就OK了?
utpcb 2008-08-27
  • 打赏
  • 举报
回复
做JOB 咯写好动态SQL 定时执行
加载更多回复(1)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧