2014-09-30 6 views
0

У меня есть две базы данных, A и B. База данных A имеет 3 таблицы T1, T2 и T3. Эти три таблицы также содержатся в базе данных B. Каждый раз, когда в этих трех таблицах в базе данных A есть запись update/delete/new, мне нужно будет синхронизировать это с этими тремя таблицами в базе данных B. Как я могу это сделать?SQL Server: как синхронизировать две таблицы в разных базах данных?

Кроме того, T1, T2, T3 не будут изменены в базе данных B. Они будут только для чтения. Поэтому мне нужно только обновить их, если в базе данных были изменения.

Я использую SQL Server 2008 и SQL Server Management Studio.

ответ

1

Вы можете использовать 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 

Выше триггера только для одной таблицы Создание триггеров, как указано выше, для других таблиц также

+0

Я проверю это ... Спасибо. – Tracer

+0

Нет проблем Рад помочь Если это подходит, и оно решает вашу проблему Примите это как ответ – Rajesh

Смежные вопросы