Замените пустые столбцы в оперативной базе данных данными из резервной копии SQL Server. - PullRequest
0 голосов
/ 23 сентября 2018

У меня недавно произошла ужасная ошибка.

При попытке исправить проблему, возникшую у нас с нашей системой Exact Synergy, я пытался заменить данные в двух столбцах для одной учетной записи на NULL, вместо этого я заменил ихдва столбца во ВСЕХ учетных записях с NULL.Полное восстановление из резервной копии не вариант, поэтому теперь мне остается попытаться выяснить, как заменить отсутствующие данные.

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

Поскольку это резервная копия одной и той же базы данных, все таблицы и столбцы имеют одинаковое имя.

  • Базы данных Synergy и Synergy_TESTDB
  • Владелец таблиц: dbo
  • Таблица называется Addresses
  • Столбцы называются textfield1 и textfield2

Что я хотел бы сделать, это взять данные в textfield1 и textfield2 из резервной базы данных и использовать их для заполнения пустых,или NULL, столбцы в действующей базе данных.

Я чрезвычайно новичок в SQL, и был бы признателен за любую помощь.

1 Ответ

0 голосов
/ 23 сентября 2018

Это явно не проверено.Я не несу ответственности за то, что вы используете этот код.Тем не менее, я хотел бы попытаться помочь вам.

Главное - это именование базы данных из 3 частей: я предполагаю, что вы восстановили резервную копию на том же сервере.Я также предполагаю, что у вас есть первичный ключ на столе?И что Synergy_TESTDB является восстановленной базой данных:

update target 
set target.textfield1 = source.textfield1 
from Synergy.dbo.Addresses target
join Synergy_TESTDB.dbo.Addresses source on target.PrimaryKeyCol = source.PrimaryKeyCol
where target.textfield1 IS NULL

update target 
set target.textfield2 = source.textfield2 
from Synergy.dbo.Addresses target
join Synergy_TESTDB.dbo.Addresses source on target.PrimaryKeyCol = source.PrimaryKeyCol
where target.textfield2 IS NULL

(Конечно, это можно сделать в одном обновлении, но я стараюсь сделать его простым.)

Я настоятельно рекомендую вам попробоватьсначала в другой тестовой базе данных.

Хорошая привычка - использовать такой шаблон:

BEGIN TRANSACTION

-- Perform updates

-- Examine the results: select * from dbo.Blah ...

-- If results are wrong, we just rollback anyway
ROLLBACK

-- If results are what you want, uncomment the COMMIT and comment out the ROLLBACK
-- COMMIT TRANS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...