#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:
Вы можете сделать это двумя способами
-
Имейте новые поля / столбцы даты, такие как update_time и / или create_time (при необходимости может быть установлено значение по умолчанию). Эти поля будут указывать статус записи. Вам нужно сохранить ваше предыдущее время выполнения, а затем ваш запрос select будет искать записи с временем обновления / создания, превышающим время выполнения previous_run_time, а затем вы можете переместить эти записи в новую базу данных.
-
Включите CDC в исходной таблице, которая доступна по умолчанию в SQL Server, а затем переместить только те записи, которые были затронуты.