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

Откуда:
Сообщений: 1
прошу помощи у форумчан !!!

суть проблемы:
есть два сервера, между ними настроена репликация. Проблема заключается только в синхронизации файлов. Создана дополнительная таблица на каждом сервере, куда с помощью триггера вносятся ID измененных / удаленных / новых файлах. Теперь мне необходимо изменить скрипт выборки и синхронизации файлов так, чтобы он руководствовался данными из этих таблиц... скрипт, который сейчас работает (криво)

DECLARE @IDSELAM table (ID uniqueidentifier,CreationDate datetime)
DECLARE @IDSToInsertElam table (ID uniqueidentifier)
DECLARE @IDSToDeleteElam table (ID uniqueidentifier)
DECLARE @IDSToInsertRzn table (ID uniqueidentifier)
DECLARE @IDSToDeleteRzn table (ID uniqueidentifier)
DECLARE @ID uniqueidentifier
DECLARE @SyncDate datetime
--PRINT 'Получаем коды и даты файлов с srvelam'
INSERT INTO @IDSELAM
SELECT ID,CreationDate FROM srvelam.ElamedFileDB.dbo.DataFiles

--PRINT 'Находим дату последнего синхронизованный файл'
SET @SyncDate=
(SELECT Max(t1.CreationDate) FROM @IDSELAM as t1 JOIN ElamedFileDB.dbo.DataFiles as t2 ON
t1.ID=t2.ID AND t1.CreationDate=t2.CreationDate)

--PRINT 'Находим файлы которые надо добавить на SrvElam'
INSERT INTO @IDSToInsertElam
SELECT r.ID FROM ElamedFileDB.dbo.DataFiles r LEFT JOIN
@IDSELAM e ON r.ID=e.ID
WHERE e.ID IS NULL AND r.CreationDate>@SyncDate

--PRINT 'Находим файлы которые надо удалить с SrvElam'
INSERT INTO @IDSToDeleteElam
SELECT e.ID FROM @IDSELAM e LEFT JOIN ElamedFileDB.dbo.DataFiles r ON r.ID=e.ID
WHERE r.ID IS NULL AND e.CreationDate<@SyncDate

--PRINT 'Находим файлы которые надо добавить на SrvRzn'
INSERT INTO @IDSToInsertRzn
SELECT e.ID FROM @IDSELAM e LEFT JOIN ElamedFileDB.dbo.DataFiles r ON r.ID=e.ID
WHERE r.ID IS NULL AND e.CreationDate>@SyncDate

--PRINT 'Находим файлы которые надо удалить с SrvRzn'
INSERT INTO @IDSToDeleteRzn
SELECT r.ID FROM ElamedFileDB.dbo.DataFiles r LEFT JOIN @IDSELAM e ON r.ID=e.ID
WHERE e.ID IS NULL AND r.CreationDate<@SyncDate

--PRINT 'Добавляем файлы на SrvElam'
INSERT INTO srvelam.ElamedFileDB.dbo.DataFiles
SELECT r.* FROM ElamedFileDB.dbo.DataFiles r JOIN @IDSToInsertElam ie ON r.ID=ie.ID

--PRINT 'Удаляем файлы с SrvElam'
DECLARE IDSDelElam CURSOR LOCAL FOR SELECT * from @IDSToDeleteElam
OPEN IDSDelElam
FETCH NEXT FROM IDSDelElam INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN

заранее прошу прощенья, но в этом деле я новичок
13 июн 13, 09:06    [14426261]     Ответить | Цитировать Сообщить модератору
 Re: Filestream задание на репликацию с выборкой измененных файлов  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Vadim Deamant
DECLARE @IDSELAM table (ID uniqueidentifier,CreationDate datetime)
DECLARE @IDSToInsertElam table (ID uniqueidentifier)
DECLARE @IDSToDeleteElam table (ID uniqueidentifier)
DECLARE @IDSToInsertRzn table (ID uniqueidentifier)
DECLARE @IDSToDeleteRzn table (ID uniqueidentifier)
DECLARE @ID uniqueidentifier
DECLARE @SyncDate datetime
--PRINT 'Получаем коды и даты файлов с srvelam'
INSERT INTO @IDSELAM
SELECT ID,CreationDate FROM srvelam.ElamedFileDB.dbo.DataFiles

--PRINT 'Находим дату последнего синхронизованный файл'
SET @SyncDate=
(SELECT Max(t1.CreationDate) FROM @IDSELAM as t1 JOIN ElamedFileDB.dbo.DataFiles as t2 ON
t1.ID=t2.ID AND t1.CreationDate=t2.CreationDate)

--PRINT 'Находим файлы которые надо добавить на SrvElam'
INSERT INTO @IDSToInsertElam 
SELECT r.ID FROM ElamedFileDB.dbo.DataFiles r LEFT JOIN
 @IDSELAM e ON r.ID=e.ID
 WHERE e.ID IS NULL AND r.CreationDate>@SyncDate 
 
--PRINT 'Находим файлы которые надо удалить с SrvElam'
INSERT INTO @IDSToDeleteElam
SELECT e.ID FROM @IDSELAM e LEFT JOIN ElamedFileDB.dbo.DataFiles r ON r.ID=e.ID
WHERE r.ID IS NULL AND  e.CreationDate<@SyncDate

--PRINT 'Находим файлы которые надо добавить на SrvRzn'
INSERT INTO @IDSToInsertRzn
SELECT e.ID FROM @IDSELAM e LEFT JOIN ElamedFileDB.dbo.DataFiles r ON r.ID=e.ID
WHERE  r.ID IS NULL AND e.CreationDate>@SyncDate 

--PRINT 'Находим файлы которые надо удалить с SrvRzn'
INSERT INTO @IDSToDeleteRzn
SELECT r.ID FROM ElamedFileDB.dbo.DataFiles r LEFT JOIN @IDSELAM e ON r.ID=e.ID
WHERE e.ID IS NULL AND  r.CreationDate<@SyncDate

--PRINT 'Добавляем файлы на SrvElam'
INSERT INTO srvelam.ElamedFileDB.dbo.DataFiles
SELECT r.* FROM ElamedFileDB.dbo.DataFiles r JOIN @IDSToInsertElam ie ON r.ID=ie.ID

--PRINT 'Удаляем файлы с SrvElam'
DECLARE IDSDelElam CURSOR LOCAL FOR SELECT * from @IDSToDeleteElam
OPEN IDSDelElam
FETCH NEXT FROM IDSDelElam INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN 
13 июн 13, 10:24    [14426606]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить