我有两个数据库,A和B.数据库A有3个表T1,T2和T3。这三个表也包含在数据库B中。每次在数据库中的这三个表中都有更新/删除/新记录时,AI需要将它与数据库B中的这三个表同步。我该怎么做?
此外,数据库B中不会更改T1,T2,T3。它们仅用于阅读。所以,如果数据库A发生了变化,我只需要更新它们。
我正在使用SQL Server 2008和SQL Server Management Studio。
答案 0 :(得分:1)
如果在DatabaseA中更改了数据,您可以使用CONTEXT_INFO
和Triggers
更新数据库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