Сталкивались ли вы со случайным обновлением или удалением данных SQL и с трудом восстанавливали их?

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

1) Сделайте резервную копию таблицы (или базы данных), которую вы хотите обновить.

Выбор между резервным копированием таблицы или всей базы данных зависит от вашей стратегии.

Для резервного копирования таблицы выполните следующую команду

SELECT * FROM [dbo].[tblOriginal] INTO [dbo].[tblBackup];

Для резервного копирования базы данных,

Right click on the selected database in SQL Server -> Task -> Backup

2) Используйте BEGIN TRANSACTION (или BEGIN TRAN)

Использование BEGIN TRAN — еще один хороший способ дважды проверить данные, которые мы пытаемся изменить, прежде чем мы COMMIT TRAN. Если мы случайно обновим и удалим что-то, что нам не нужно, мы все равно можем выполнить команду ROLLBACK TRAN, чтобы вернуться в исходное состояние.

Например, мы пытаемся удалить пользователя с id = 4 из базы данных, но забываем использовать предложение where и используем следующий запрос.

DELETE * FROM [dbo].[tblUser];

Теперь мы застряли, поскольку мы удаляем всю запись в таблице.

Теперь предположим, что вместо этого мы используем BEGIN TRAN.

BEGIN TRAN
DELETE * FROM [dbo].[tblUser];

Мы снова проверяем и понимаем, что выполняем неверный запрос. Таким образом, мы можем ОБРАТИТЬСЯ с помощью

ROLLBACK TRAN

И затем мы снова выполняем новый запрос,

BEGIN TRAN
DELETE * FROM [dbo].[tblUser] WHERE [UserID] = 4;

Как только мы убедимся, что удалили запись правильно, мы можем выполнить COMMIT TRAN для завершения транзакции.

Полный код будет:

BEGIN TRAN
DELETE * FROM [dbo].[tblUser] WHERE [UserID] = 4;
COMMIT TRAN

Примечание:

1) Как только вы зафиксируете транзакцию, ее нельзя будет откатить.

2) Использование BEGIN TRAN заблокирует таблицу, всегда COMMIT TRAN ИЛИ ROLLBACK TRAN, чтобы убедиться, что она завершает транзакцию, иначе она заблокирует изменяемую запись, и другой пользователь не сможет получить к ней доступ.

3) Чтобы проверить наличие незавершенной транзакции, используйте DBCC OPENTRAN.

4) Вы можете использовать следующую команду взаимозаменяемо, кроме DBCC OPENTRAN.

BEGIN TRANSACTION | BEGIN TRAN
COMMIT TRANSACTION | COMMIT TRAN
ROLLBACK TRANSACTION | ROLLBACK TRAN

Дополнительные чтения:

Советы по T-SQL: больше никогда случайно не обновляйте и не удаляйте данные!