SQL Server:如何同步不同数据库中的两个表?
问题描述:
我有两个数据库,A和B.数据库A有3个表T1,T2和T3。这三个表也包含在数据库B中。每当数据库A中的这三个表中有更新/删除/新记录时,我都需要将其与数据库B中的这三个表同步。我该怎么做?SQL Server:如何同步不同数据库中的两个表?
此外,T1,T2,T3在数据库B中不会更改,它们仅用于读取。所以,如果数据库A中有更改,我只需要更新它们。
我正在使用SQL Server 2008和SQL Server Management Studio。
答
尝试此链接 它可以在MySQL Workbench中的模型与实时数据库 http://dev.mysql.com/doc/workbench/en/wb-database-synchronization.html
答
您可以使用CONTEXT_INFO
和Triggers
更新数据库B的表,如果数据在DatabaseA
DECLARE @ID int,@CONTEXT_INFO varbinary(128)
SET @ID = 10
SET @CONTEXT_INFO =cast('ID='+CONVERT(varchar(10),@ID)
+REPLICATE(' ',128) as varbinary(128))
SET CONTEXT_INFO @CONTEXT_INFO
--do Update/Delete of DatabaseA that will fire the trigger
SET CONTEXT_INFO 0x0
这里是触发的检索值的部分:
Create Trigger UpdDel
on TableA --TableA of DatabaseA
Instead of Update,Delete
as
Begin
Begin Try
DECLARE @ID int
,@sCONTEXT_INFO varchar(128)
SELECT @sCONTEXT_INFO=CAST(CONTEXT_INFO() AS VARCHAR)
FROM master.dbo.SYSPROCESSES WHERE [email protected]@SPID
IF Substring(RTRIM(@sCONTEXT_INFO),1,LEN(RTRIM(@sCONTEXT_INFO))) like '%ID%'
BEGIN
SET @ID=Substring(RTRIM(@sCONTEXT_INFO),LEN(RTRIM(@sCONTEXT_INFO)),1)
END
ELSE
BEGIN
RAISERROR('ID was not specified',16,1)
ROLLBACK TRAN
RETURN
END
Insert into DatabaseB.dbo.TableA(col1,col2,col3,col4,col5)
Select col1,col2,col3,col4,col5 from DatabaseA.dbo.TableA where [email protected]
/* Do Your Action for DatabaseA table here */
End Try
Begin Catch
Declare @ErrMsg Nvarchar(max),@Errseverity int
Set @ErrMsg=ERROR_MESSAGE()
Set @Errseverity=ERROR_SEVERITY()
Raiserror(@ErrMsg,@Errseverity,1)
End Catch
End
以上触发器仅适用于一个表创建其他表的触发器也如上所示
问题是针对ms SQL – radar 2014-09-30 10:20:30