Пока не будет лучшего ответа, я просто оставлю то, что мы здесь сделали.
Мы создали набор инструкций и скрипт, который заставит клиента создать новую базу данных, затем использовать скрипт передать данные в новую базу данных, а затем создать резервную копию этой вновь созданной базы данных.
Сценарий (запрос) эффективно создает из таблиц все значения oop до go и создает sql с :
SET @sql = 'SELECT * INTO [' + @toDB + '].' + @currTable + ' FROM [' + @fromDB + '].' + @currTable
, которая берет текущее имя таблицы (@currTable) и перемещает его из своей основной базы данных (@fromDB) во вновь созданную базу данных (@toDB).
Это не идеально, но на данный момент кажется самым простым вариантом для больших объемов данных. Что было бы замечательно, если бы у них была возможность при резервном копировании выбрать, какие таблицы включить.
Для справки, если другим нужно сделать что-то подобное, вот скрипт:
--before you run this script, check that the 2 variables at the top are set correctly
--the @toDB variable should be a database you have just created to temporarily store exported data
DECLARE @fromDB VARCHAR(max) = 'main_database' --this should be set to the name of the database you are copying from
DECLARE @toDB VARCHAR(max) = 'main_database_export' --this should be set to the name of the database you are copying to (the temporary one)
/* ------------------------------------------
---------Do not edit from here down---------
------------------------------------------- */
--declare variables to be used in different parts of the script
DECLARE @sql VARCHAR(max)
DECLARE @currPos INT = 1
DECLARE @currTable VARCHAR(max)
DECLARE @tableNames TABLE(id INT, name varchar(max))
--create a list of files that we want top copy to the new database, the id must be sequential and start at 1)
INSERT INTO @tableNames VALUES
(1, '[dbo].[table1]'),
(2, '[dbo].[table2]'),
(3, '[dbo].[table3]'),
(4, '[dbo].[table4]')
DECLARE @totalTables INT = 4 --this should always be the number of the last table to be copied, if you add more or take any away, update this
--loop through the tables and copy them across
WHILE (@currPos <= @totalTables)
BEGIN
--get the table name of the table we are up to
SELECT @currTable = name FROM @tableNames WHERE id = @currPos
--create the sql that will copy from the old table into the new table (including the table structure), this table must not exist yet
SET @sql = 'SELECT * INTO [' + @toDB + '].' + @currTable + ' FROM [' + @fromDB + '].' + @currTable
--run the sql statement we just created, this will create the table and copy the content (and leave a message to say how many rows were copied)
EXECUTE (@sql)
--set the counter up one so we move onto the next table
SET @currPos = @currPos+1
--output the name of the table that was just processed (note that no messages will show until the entire script finishes)
PRINT @currTable + ' Copied.'
END
Обратите внимание, что этот скрипт предназначен для предоставления клиенту, для них инструкция "Не редактировать отсюда" (вам нужно будет редактировать имена таблиц, которые вы копируете, и переменную, содержащую общее количество таблиц) .
Затем мы отправляем это с набором инструкций о том, как создать новую базу данных, запускаем этот сценарий и затем создаем резервную копию новой базы данных et c.