SQL Server:如何同步不同数据库中的两个表?

时间:2014-09-30 09:54:49

标签: sql sql-server database sql-server-2008 sync

我有两个数据库,A和B.数据库A有3个表T1,T2和T3。这三个表也包含在数据库B中。每次在数据库中的这三个表中都有更新/删除/新记录时,AI需要将它与数据库B中的这三个表同步。我该怎么做?

此外,数据库B中不会更改T1,T2,T3。它们仅用于阅读。所以,如果数据库A发生了变化,我只需要更新它们。

我正在使用SQL Server 2008和SQL Server Management Studio。

2 个答案:

答案 0 :(得分:1)

如果在DatabaseA中更改了数据,您可以使用CONTEXT_INFOTriggers更新数据库B中的表

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 SPID=@@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 ID=@ID

/* 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

上面的触发器仅适用于一个表创建触发器,如上面的其他表也

答案 1 :(得分:0)

试试此链接 可以将MySQL Workbench中的模型与实时数据库同步     http://dev.mysql.com/doc/workbench/en/wb-database-synchronization.html