Имя: Пароль:
1C
 
MS SQL. Скопировать 1Сную таблицу, а потом восстановить из неё
0 SeiOkami
 
14.03.19
08:22
Добрый день

Имеем задачу, где обработка будет изменять два справочника и один регистр сведений(кодировать новые элементы и ставить связи в РС).
Изменения будут большие. В больших таблицах. Хочется для тестирования иметь возможность полностью "откатить" таблицы обратно для повторного запуска обработки.

Как средствами MS SQL обеспечить себе такую возможность? Есть пример скрипта, который бы дублировать таблицу с данными с возможностью последующего "восстановления" оригинала?
1 SeiOkami
 
14.03.19
08:43
up
2 Fish
 
гуру
14.03.19
08:57
(0) Ну и откатывай бузу назад средствами скуля на нужную транзакцияю или момент времени. Скуль это позволяет делать при модели full.
3 Fish
 
гуру
14.03.19
08:58
(2) бузу = базу
4 Aleksey
 
14.03.19
08:59
что бекап рестор уже не можно?
5 Aleksey
 
14.03.19
09:00
*не модно
6 SeiOkami
 
14.03.19
09:11
с базой работают много людей. мне нужно просто мои таблички восстанавливать
7 rsv
 
14.03.19
09:15
(0) эээээ ну сделайте в базе табличку скульную путём копирования таблицы оригинала.Это ваша копия.
8 rsv
 
14.03.19
09:16
Зальете потом эту таблицу в оригинал.вот и все "восстановление"
9 Asmody
 
14.03.19
09:18
По базе правой кнопкой тыц, там есть Import Data/Export Data. Хоть в плоский файл, хоть в Access/Excel, хоть в другую БД
10 SeiOkami
 
14.03.19
09:38
я так понимаю, скрипт для такого описать нельзя, нужно инструменты использовать?
хотелось бы скрипт описать и просто запускать по кнопке, а не постоянно выбирать источник\приемник\таблицы и т.д.
11 Asmody
 
14.03.19
10:31
(10) Можно. Есть bcp для этого.
12 Asmody
 
14.03.19
10:33
13 ДенисЧ
 
14.03.19
10:38
(10) Вроде в мастере экспорта была кнопка для вывода скрипта? Или её убрали?
14 Ёпрст
 
гуру
14.03.19
10:40
(13) ему лень даже это открыть.
15 SeiOkami
 
14.03.19
10:41
(13), не видел такой ни на одном из этапов
16 ДенисЧ
 
14.03.19
10:42
(15) лет 10 назад видел... Сейчас нет под рукой сервера, чтобы проверить.
17 Ёпрст
 
гуру
14.03.19
10:51
(15) кнопка просмотр. Но при простом импорте\экспорте из таблицы там тупо инсерт инто селект и всё
18 Ёпрст
 
гуру
14.03.19
10:52
Можно и свой запрос написать. 1 строка кода. Перед инсертом тока, truncate не забыть
19 SeiOkami
 
14.03.19
10:57
Кнопка "Просмотр" просто показывает запрос выборки. Никаких больше скриптов нет
например, SELECT * FROM [dbo].[_Acc3322]
20 Ёпрст
 
гуру
14.03.19
10:59
(19) ну правильно, чего там смотреть то ? Сама вставка просто insert into select
21 timurhv
 
14.03.19
11:34
>Изменения будут большие. В больших таблицах.
>Хочется для тестирования иметь возможность полностью "откатить" таблицы обратно для повторного запуска обработки.
>с базой работают много людей. мне нужно просто мои таблички восстанавливать

Вы уже переросли себя, ваш уровень - базы >10000 пользователей.
Что мешает извращаться на копии базы, а не производить тестирование обработки на продакшене?
22 SeiOkami
 
14.03.19
12:02
(21)
извращаемся на копии
копия общая, постоянно используется разными командами.
23 trad
 
14.03.19
12:52
--скопировать
if object_id('_Acc3322_copy') is not null drop table _Acc3322_copy
select *
into _Acc3322_copy
from _Acc3322

--восстановить из копии
set identity_insert _Acc3322 ON
begin tran
truncate table _Acc3322
insert into _Acc3322 (список всех полей)
select *
from _Acc3322_copy
commit tran
set identity_insert _Acc3322 off
24 Вафель
 
14.03.19
13:07
(2) за это время кто-то другой может что-то сделать
25 SeiOkami
 
14.03.19
14:20
(23), о, спасибо, поробую со свойством set identity_insert

Сейчас сделал обрбаотку на 1С, в которой отмечаешь галочками таблицы, нажимаешь кнопку, получаешь на выходе два скрипта. В одном создание резервной копии через SELECT * INTO _Table_copy FROM _Table. Во втором восстановление этих таблиц через INSERT INTO (список полей кроме [_Version])
26 SeiOkami
 
14.03.19
14:21
Позже ещё покатаю и сделаю инструмент для таких манипуляций полностью в 1С (программно скрипты выполнять)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн