Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Добрый день ! Подскажите пожалуйста , как реализовать репликацию между двумя таблицами одной БД с помощью триггеров, таблицы идентичны ! Подскажите, куда смотреть, что делать....
29 дек 11, 11:09    [11844307]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Slava_Nik
Member

Откуда: из России
Сообщений: 901
посмотрите здесь http://msdn.microsoft.com/ru-ru/library/ms178134.aspx
почитайте, посоздавайте на тестовых табличках.
29 дек 11, 13:46    [11845485]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Как доваить сюда еще, чтоб она при обновлении тоже обновлял вторую таблицу ?
alter trigger replic
on table1
for insert
as
set IDENTITY_INSERT table2 ON

insert into table2  (id,fio)
SELECT   id,fio
FROM      inserted
29 дек 11, 17:27    [11847233]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Glory
Member

Откуда:
Сообщений: 104751
I3axoo
Как доваить сюда еще, чтоб она при обновлении тоже обновлял вторую таблицу ?

Написать еще триггер и для for update
29 дек 11, 17:54    [11847362]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Glory,
Вот в этом именно триггер нельзя как то вставить на update ?
alter trigger replic
on table1
for insert,update,delete 
as
set IDENTITY_INSERT table2 ON
	DECLARE @Count int
	 SELECT @Count = COUNT(*) FROM DELETED
			IF @Count > 0
				  BEGIN
					delete FROM table2 (ID,fio)
					SELECT   id,fio FROM DELETED
				  END
	 SELECT @Count = COUNT(*) FROM INSERTED
			IF @Count > 0
				 BEGIN
				   insert into table2  (id,fio)
				   SELECT   id,fio FROM     inserted
				 END



Может if update ? но там только по одному столбцу
29 дек 11, 17:56    [11847366]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Glory
Member

Откуда:
Сообщений: 104751
I3axoo
Вот в этом именно триггер нельзя как то вставить на update ?

Можно. Вставляйте.
29 дек 11, 17:57    [11847373]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Glory,
как правильно ?
update table2 
			SET id  = INSERTED , fio = INSERTED
		   END

как правильно написать ?
29 дек 11, 17:59    [11847382]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
	if update (fio) and update (id)
		   BEGIN
			update table2 
			SET id  = INSERTED , fio = INSERTED
		   END
29 дек 11, 18:00    [11847385]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
то что написал выше неправильно, подскажите как надо ?
29 дек 11, 18:01    [11847394]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Glory
Member

Откуда:
Сообщений: 104751
I3axoo
то что написал выше неправильно, подскажите как надо ?

Открыть хелп по команде UPDATE
Найти пример обновления одной таблицы значениями другой таблицы
Адаптировать его под себя
29 дек 11, 18:05    [11847406]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Glory
Member

Откуда:
Сообщений: 104751
И функция update () - это не признак команды UPDATE
29 дек 11, 18:21    [11847453]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Glory,
а как тогда отследить именно UPDATE ?
29 дек 11, 18:28    [11847477]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
этот триггер работает на Delete,Update,Insert

alter trigger replic
on table1
for insert,update,delete 
as
set IDENTITY_INSERT table2 ON
	DECLARE @Count int
	 SELECT @Count = COUNT(*) FROM DELETED
			IF @Count > 0
				  BEGIN
					delete  FROM table2 
					where id = (SELECT   id FROM DELETED)
				  END
	 SELECT @Count = COUNT(*) FROM INSERTED
			IF @Count > 0
				 BEGIN
				   insert into table2  (id,fio)
				   SELECT   id,fio FROM     inserted
				  
				 END
29 дек 11, 18:39    [11847512]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Встала новая проблема ! На две таблицы повесил одинаковые триггеры... и теперь при обновлении ругается на
Картинка с другого сайта.
29 дек 11, 18:47    [11847529]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Вам обязательно делать с помощь триггеров?
Могу подсказать как сделать репликацию через "Репликация"=)
29 дек 11, 18:52    [11847540]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Александр52,спасибо, но мне надо именено так
29 дек 11, 18:55    [11847552]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
как сделать, чтобы он не ругался на это ? если выключать, то не получается обновлять, с включенным тоже...подскажите !
29 дек 11, 21:01    [11847870]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5116
I3axoo,
set identity_insert
обратите внимание на: "В каждый момент времени только для одной таблицы в сеансе свойство IDENTITY_INSERT может принимать значение ON".
29 дек 11, 21:30    [11847971]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Glory
Member

Откуда:
Сообщений: 104751
I3axoo
как сделать, чтобы он не ругался на это ? если выключать, то не получается обновлять, с включенным тоже...подскажите !

Читать и помнить свои предыдущие темы
В которых вам уже говорили про set nocount on
29 дек 11, 21:43    [11848013]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
I3axoo
Александр52,спасибо, но мне надо именено так


Репликация слиянием (merge) использует именно механизм, который вы пытаетесь внедрить
30 дек 11, 13:20    [11850189]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Так и не смог решить эту проблему...
пробовал вначале ставить set IDENTITY_INSERT table on а потом set IDENTITY_INSERT table off...но нет....подскажите , что делать ?
set nocount on проставил в обоих триггерах
10 янв 12, 13:17    [11878267]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
Решил проблему путем выключение одного триггера во время выполнение другого и затем в конце включением ...и так в обоих триггерах
10 янв 12, 13:35    [11878434]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
invm
Member

Откуда: Москва
Сообщений: 9835
I3axoo
Решил проблему путем выключение одного триггера во время выполнение другого и затем в конце включением ...и так в обоих триггерах
И тем самым сериализовав доступ к таблицам на время работы триггера. Зачем вообще понадобилось иметь две одинаковые по содержимому таблицы?
10 янв 12, 14:07    [11878659]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
I3axoo
Member

Откуда:
Сообщений: 41
invm, а как по другому ? подскажите...ну вот понадобилось...
11 янв 12, 14:33    [11885392]     Ответить | Цитировать Сообщить модератору
 Re: Репликация  [new]
invm
Member

Откуда: Москва
Сообщений: 9835
I3axoo
invm, а как по другому ? подскажите...ну вот понадобилось...
Как можно что-то подсказать, когда вы держите в секрете решаемую задачу? "Репликация между двумя таблицами одной БД" -- это ваш способ решения, а не задача.
11 янв 12, 16:14    [11886398]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить