Запрос таблицы SQL и передача только обновленных строк в другую базу данных

#sql #sql-server #cross-database

#sql #sql-сервер #кросс-база данных

Вопрос:

У меня есть таблица базы данных, которая постоянно обновляется. Я хочу запросить только изменения / дополнения, которые были внесены в строки с определенным атрибутом в столбце. например, получить строки, которые были изменены / добавлены, столбец «описание» которого равен «xyz». Моя конечная цель — скопировать эти строки в другую таблицу в другой базе данных. Возможно ли это вообще? Причина не просто запрашивать и перезаписывать строки в другой базе данных, чтобы избежать неэффективности.

Что я пробовал до сих пор?

  • Я могу выбрать запрос в таблице, чтобы получить строки, но он выдает мне все строки, а не те, которые были изменены или недавно добавлены. Если я добавлю эти строки в таблицу в другой базе данных, единственный вариант, который у меня есть, — перезаписать строки.

  • Таблица журнала регистрирует изменения в таблице, но я не могу установить дополнительные фильтры в SQL, которые сообщают мне, какие из этих изменений связаны со столбцом ‘description’ как ‘xyz’.

Комментарии:

1. Что-то вызывает?

2. Какую СУБД вы используете?

3. SQL Server Management Studio

Ответ №1:

Напишите свои update инструкции, которые будут использоваться OUTPUT для записи значений до и после и занесите их в таблицу по вашему выбору.

Вот действительно простой update пример, который использует output для хранения значений RowID, before и after для столбца activityType:

 DECLARE @MyTableVar table (  
    SummaryBefore nvarchar(max),  
    SummaryAfter nvarchar(max),
    RowID int
    );  

update DBA.dbo.dtest set ActivityType = 3
OUTPUT deleted.ActivityType,   
       inserted.ActivityType,
       inserted.RowID
    INTO @MyTableVar  

    select * From @MyTableVar
  

Ответ №2:

Вы можете сделать это двумя способами

  1. Имейте новые поля / столбцы даты, такие как update_time и / или create_time (при необходимости может быть установлено значение по умолчанию). Эти поля будут указывать статус записи. Вам нужно сохранить ваше предыдущее время выполнения, а затем ваш запрос select будет искать записи с временем обновления / создания, превышающим время выполнения previous_run_time, а затем вы можете переместить эти записи в новую базу данных.

  2. Включите CDC в исходной таблице, которая доступна по умолчанию в SQL Server, а затем переместить только те записи, которые были затронуты.