Перенос данных с 7.3 на 7.12
Коллеги, у кого был опыт, поделитесь лучшими практиками.
Есть bpm'online CRM 7.3, которая автоматически на 7.4 (и далее) не переводится. Техподдержка предложила сделать всё руками на новой системе (что технически возможно).
Но появляется другой вопрос - как переносить данные? Через Excel довольно сложно будет, учитывая, что надо перенести настройки прав, пользователей, системные настройки, прикрепленные файлы и т.п.
Возможно, в мире существует набор SQL-скриптов, которые делают это для базовой конфигурации (для измененной уже допишем)?
Заранее спасибо за варианты решения
Нравится
Добрый день.
Есть пользовательский скрипт, предназначенный для переноса данных. Скрипт идет по списку таблиц, указанных пользователем, проверяет соответствие полей в таблицах обеих БД, формирует запрос и выполняет его:
begin transaction
declare @syncTablesNames TABLE (TableName varchar(50));
declare @sourceDBName varchar(50),
@tableName varchar(50),
@columnName varchar(50),
@sourceColumnExists bit,
@insertSQLText nvarchar(MAX),
@selectSQLText nvarchar(MAX),
@columnExistsSQLText nvarchar(MAX),
@idExistsCondition nvarchar(MAX),
@resultSQLText nvarchar(MAX);
SET @sourceDBName = 'SourceDataBaseName';
-- set tables names
INSERT INTO @syncTablesNames
SELECT 'tbl_Contact' UNION
SELECT 'tbl_Account';
declare tableNameCursor cursor LOCAL FAST_FORWARD FOR SELECT * FROM @syncTablesNames;
open tableNameCursor;
fetch next FROM tableNameCursor INTO @tableName
WHILE (@@fetch_status = 0)
BEGIN
SET @insertSQLText = 'insert into ' + @tableName + '(';
SET @selectSQLText = 'select ';
SET @idExistsCondition = ' where not ID in (select ID from ' +
@tableName + ');';
--Disable Table Constraint
exec ('alter table ' + @tableName + ' nocheck constraint all; ');
declare columnNameCursor cursor LOCAL FAST_FORWARD FOR SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_NAME = @tableName;
open columnNameCursor;
fetch next FROM columnNameCursor INTO @columnName;
while (@@fetch_status = 0)
begin
SET @columnExistsSQLText = 'if exists (select COLUMN_NAME ' +
'from ' + @sourceDBName +
'.information_schema.columns ' +
'where TABLE_NAME = ''' +
@tableName + ''' AND ' +
'COLUMN_NAME = ''' +
@columnName + ''') ' +
'set @sourceColumnExists = 1 ' +
'else ' +
'set @sourceColumnExists = 0 ';
--check remote table column exists
exec sp_executesql @columnExistsSQLText,
N'@sourceColumnExists bit out',
@sourceColumnExists = @sourceColumnExists output
--include column into select-insert statment
IF (@sourceColumnExists = 1)
begin
SET @insertSQLText = @insertSQLText + @columnName + ', ';
SET @selectSQLText = @selectSQLText + @columnName + ', ';
end;
fetch next FROM columnNameCursor INTO @columnName;
end;
close columnNameCursor;
deallocate columnNameCursor;
SET @insertSQLText = substring(@insertSQLText, 1, len(@insertSQLText) - 2);
SET @selectSQLText = substring(@selectSQLText, 1, len(@selectSQLText) - 2);
SET @insertSQLText = @insertSQLText + ') ';
SET @selectSQLText = @selectSQLText + ' from ' + @sourceDBName + '.dbo.' +
@tableName + @idExistsCondition;
--result select-insert statment
SET @resultSQLText = @insertSQLText + @selectSQLText;
exec (@resultSQLText);
fetch next FROM tableNameCursor INTO @tableName
END;
close tableNameCursor;
deallocate tableNameCursor;
--Enable Table Constraint
declare tableNameCursor cursor LOCAL FAST_FORWARD FOR SELECT * FROM @syncTablesNames;
open tableNameCursor;
fetch next FROM tableNameCursor INTO @tableName;
WHILE (@@fetch_status = 0)
BEGIN
exec ('alter table ' + @tableName + ' check constraint all; ');
fetch next FROM tableNameCursor INTO @tableName;
END;
close tableNameCursor;
deallocate tableNameCursor;
rollbackНо все же, мне кажется, лучше это делать стандартными средствами - через Excel.
Выгрузить в Excel таблицы с десятками полей из 7.3 - это тоже задача ещё
Если оценивать по трудоемкости, то мне кажется оптимально:
- Сделать вручную генерацию sql-скриптов на 7.3
- Запускать на 7.12, пока, не заработает

Так как названия коробочных колонок не должны меняться, а новые предполагается, что уже созданы, то должно быть быстрее, чем гонять Excel'ы.
Меня одно удивляет - в каждом проекте изобретался велосипед?
В каждом проекте перехода с 7.3 до 7.12 да, сейчас конечно обновления на порядок проще