2015-06-02 2 views
1

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

create table country_bkp as select * from country; 

Что SQL я должен использовать, чтобы восстановить country таблицу в исходное состояние? я могу сделать

insert into country select * from country_bkp; 

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

Есть ли команда SQL для объединения данных обратно?

Последняя альтернатива будет

DROP TABLE country; 
create table country as select * from country_bkp; 

, но я хочу, чтобы избежать этого, как и все grants/permissions потеряется этим.

Другого способ очистки будет

delete from country ; 
insert into country select * from country_bkp; 

Но я ищу более совмещенный подход без удаления данных из исходной таблицы.

+0

Почему вы хотите объединиться, когда все вы хотите сделать, чтобы вернуться к исходным данным? –

+0

Ну, идея состоит в том, чтобы сохранить данные, если добавлена ​​новая запись. –

ответ

3

Вместо того, чтобы падать на стол, который, как вы отметили, потеряет все разрешения defitions, вы можете truncate это просто удалить все данные, а затем вставить, выберите старые данные:

TRUNCATE TABLE country; 
INSERT INTO country SELECT * FROM county_bkp; 
+0

delete будет лучшим вариантом, чем усечение, а затем рассмотрение DML над DDL. Мы всегда можем откатить :) –

+1

@AniketThakur true, но 'truncate' будет ** так ** намного быстрее. И это освободит любую выделенную степень после первой. – Mureinik

3

Только одно решение для восстановления данных из таблицы резервного копирования переименовывает оригинальную таблицу со случайным именем и переименовывает таблицу резервного копирования с именем исходной таблицы в случае, если в качестве исходной таблицы включена идентификационная вставка.
, например
Оригинал Таблица - Счет-фактура
Back Up Table - Invoice_back

Теперь переименуйте эти таблицы:

Оригинальный стол - Invoice_xxx
Back Up Table - Счет

+0

elabrate с примером пожалуйста –

+0

Но усечение было бы намного быстрее, ведь это сработало для меня. –

+1

Truncate - хороший способ, только если Identity Insert in Off в исходной таблице. В случае, если Identity Insert включен, есть только один способ переименования таблиц –

Смежные вопросы