本地數據庫(sql server)插入一條新數據時,同步到服務器數據庫


之前有個同學問我,本地數據庫插入新數據時怎么同步到服務器上,當時我先想到是程序邏輯控制,作相應的處理。

但有時候我們程序不太好處理,那能不能從數據庫入手呢,數據庫不是有觸發器(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協議

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM