天天看點

通過觸發器實作資料庫的即時同步

<a href="http://www.cnblogs.com/ghd258/archive/2005/10/24/260783.html"></a>

通過觸發器實作資料庫的即時同步

---即時同步兩個表的執行個體:

通過觸發器實作資料庫的即時同步

--測試環境:SQL2000,遠端主機名: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

通過觸發器實作資料庫的即時同步
通過觸發器實作資料庫的即時同步
通過觸發器實作資料庫的即時同步

--插入資料測試

通過觸發器實作資料庫的即時同步

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

本文轉自高海東部落格園部落格,原文連結http://www.cnblogs.com/ghd258/archive/2005/10/24/260783.html,如需轉載請自行聯系原作者