之前有個同學問我,本地數據庫插入新數據時怎麼同步到服務器上,當時我先想到是程序邏輯控制,作相應的處理。
但有時候我們程序不太好處理,那能不能從數據庫入手呢,數據庫不是有觸發器(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協議
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!