网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.讲解Informix数据库的安全性及安.
.有关BCB连接Informix数据库的参考.
.sqlplus命令的使用大全.
.数据变换和转换注意事项(SQL).
.如何识别真实和自动创建的索引?.
.讲解OLTP与数据仓库两者之间的不.
.教你在SQL Server数据库中导入导.
.SQL Server与Excel数据互导.
.讲解孤立用户和对象名无效问题的.
.SQL Server端口更改后的数据库连.
.品味SQL Server 2005的几个新功能.
.SQL SERVER的行式触发器.
.三步堵死SQL注入漏洞.
.测试sql server业务规则链接方法.
.教你轻松掌握数据库系统的一些专.
.SQL Server数据库管理员必备的DB.
.如何在SqlServer与oracel中进行分.
.SQL Server 2008表值参数的创建和.
.讲解SQL Server数据库被挂马的解.
.log4net和SQL Server 2000.

如何通过触发器实现数据库的即时同步

发表日期:2008-4-10


问题:如何通过触发器实现数据库的即时同步?

解答:具体的解决方法请参考下文。

即时同步两个表的示例如下:

测试环境如下:SQL Sever 2000数据库,远程主机名:xz,用户名:sa,密码:无,数据库名:test

创建测试表,请注意不能用标识列做主键,因为不能进行正常的更新。

然后在本机上创建测试表,注意远程主机上也要做同样的建表操作,只是不写触发器。

if exists (select * from dbo.sysobjects where id = object_id(N'[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [test]

create table test(id int not null constraint PK_test primary key

,name varchar(10))

go

--创建同步的触发器

create trigger t_test on test

for insert,update,delete

as

set XACT_ABORT on

--启动远程服务器的MSDTC服务

exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output

--启动本机的MSDTC服务

exec master..xp_cmdshell 'net start msdtc',no_output

--进行分布事务处理,假如表用标识列做主键,你可以使用下面的这个方法

BEGIN DISTRIBUTED TRANSACTION

delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)

where id in(select id from deleted)

insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test)

select * from inserted

commit tran

go

--插入数据测试

insert into test

select 1,'aa'

union all select 2,'bb'

union all select 3,'c'

union all select 4,'dd'

union all select 5,'ab'

union all select 6,'bc'

union all select 7,'ddd'

--删除数据测试

delete from test where id in(1,4,6)

--更新数据测试

update test set name=name+'_123' where id in(3,5)

--最后显示测试的结果

select * from test a full join

openrowset('sqloledb','xz';'sa';'',test.dbo.test) b on a.id=b.id

上一篇:错误 2812: 未能找到存储过程 master.dbo.xp_fixeddrives 人气:4979
下一篇:用一个案例讲解SQL Server数据库恢复 人气:1035
浏览全部触发器的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐