之前有個同學問我,本地資料庫插入新數據時怎麼同步到伺服器上,當時我先想到是程式邏輯控制,作相應的處理。 但有時候我們程式不太好處理,那能不能從資料庫入手呢,資料庫不是有觸發器(Trigger)嗎,應該是可以的,這裡就用這個來做吧。一些東西也是不太懂,網上找的資料,感謝那些人默默奉獻的好人。如有誤解, ...
之前有個同學問我,本地資料庫插入新數據時怎麼同步到伺服器上,當時我先想到是程式邏輯控制,作相應的處理。
但有時候我們程式不太好處理,那能不能從資料庫入手呢,資料庫不是有觸發器(Trigger)嗎,應該是可以的,這裡就用這個來做吧。一些東西也是不太懂,網上找的資料,感謝那些人默默奉獻的好人。如有誤解,歡迎各位大神指正!
1、首先,瞭解什麼是觸發器
觸發器(trigger)是SQL server 提供給程式員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的執行不是由程式調用,也不是手工啟動,而是由事件來觸發,當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。
簡單講下創建trigger的語法:
CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR | AFTER | INSTEAD OF [DELETE, INSERT, UPDATE] AS T-SQL語句 GO
2、怎麼連接到伺服器的資料庫
select * from sys.servers --查看當前的服務 EXEC sp_addlinkedserver @server='black',--被訪問的伺服器別名(習慣上直接使用目標伺服器IP,或取個別名如:black) @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.1.36', --要訪問的伺服器 @catalog='anmax' --資料庫名稱 exec sp_addlinkedsrvlogin 'black','false',null,'sa','sa123456' --(balck->前面取的別名;sa->資料庫用戶名;sa123456->密碼) select top 10 * from [black].[anmax].dbo.ad --測試是否成功 exec sp_droplinkedsrvlogin 'black',null --移除登陸用戶 exec sp_dropserver 'black' --移除服務
3、同步插入的數據
create trigger trgtest on product after insert as begin --select * from sys.servers --查看當前的服務 EXEC sp_addlinkedserver @server='black',--被訪問的伺服器別名(習慣上直接使用目標伺服器IP,或取個別名如:JOY) @srvproduct='', @provider='SQLOLEDB', @datasrc='192.168.1.36', --要訪問的伺服器 @catalog='anmax' --資料庫名稱 exec sp_addlinkedsrvlogin 'black','false',null,'sa','sa123456' --執行同步代碼 declare @proId int; set @proId=@@identity;--插入的數據ID select * into [你伺服器表] from product where productid=@Proid exec sp_droplinkedsrvlogin 'black',null exec sp_dropserver 'black' end
期間遇到些問題:開啟TCP/IP協議