powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Реструктуризация таблицы
15 сообщений из 15, страница 1 из 1
Реструктуризация таблицы
    #39771595
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

У нас есть две идентичные базы данных, двух клиентов. Поставлена задача перенести обоих в "облако" и обеспечить возможность переключаться между ними. Проблема заключается в том, что базы слегка различаются, а софт требует точного соответствия структур.

Например:

БАЗА1, ТАБЛИЦА1: ID , КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...
БАЗА2, ТАБЛИЦА1: КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...

(В БАЗА2\ТАБЛИЦА1 отсутствует колонка уникального идентификатора записи 'ID').

Есть ли какой-нибудь способ - как добавить ID в БАЗА2\ТАБЛИЦА1 так, чтобы порядок колонок сохранился и соответсвовал первой базе и при этом, все данные, хранящиеся в таблице второй базы, там и остались? То есть, чтобы стало:

БАЗА2, ТАБЛИЦА1, ID , КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...

Например, через создание новой таблицы или как то еще. Это требуется сделать SQL скриптом , так как на самом деле, таких баз и таблиц очень много...

Спасибо...
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771653
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT 1 as ID, КОЛОНКА1, КОЛОНКА2, КОЛОНКА3... FROM БАЗА2
или как тупой нумератор строк используйте *RANK* функцию
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771655
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
главное, что бы вы понимали последствия использования такого ID в вашем софте
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771665
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,
Не совсем понял, как SELECT изменит структуру базы? Необходимо, ятобы первой колонкой в обоих таблицах было условное поле ID.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771666
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,
В данном конкретном случае, этот ID не используется и ни на что не влияет. Его необходимо добавить только для того, чтобы "выравнить" структуры различных баз между собой. Иначе, софт отказывается переключаться с одной базы на другую.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771701
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey V NЕсть ли какой-нибудь способ - как добавить ID в БАЗА2\ТАБЛИЦА1 так, чтобы порядок колонок сохранился и соответсвовал первой базе и при этом, все данные, хранящиеся в таблице второй базы, там и остались?Да, есть способ.
Создать во второй базе таблицу с нужной структурой и временным именем, перелить в неё данные из существующей таблицы, удалить старую таблицу, переименовать новую в старую. Не забыть добавить все индексы, констрейны, описания полей и т.д.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771754
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgSergey V NЕсть ли какой-нибудь способ - как добавить ID в БАЗА2\ТАБЛИЦА1 так, чтобы порядок колонок сохранился и соответсвовал первой базе и при этом, все данные, хранящиеся в таблице второй базы, там и остались?Да, есть способ.
Создать во второй базе таблицу с нужной структурой и временным именем, перелить в неё данные из существующей таблицы, удалить старую таблицу, переименовать новую в старую. Не забыть добавить все индексы, констрейны, описания полей и т.д.если скрипт достаточно универсальный, должны быть проверки возможности перехода на новую структуру... например, при смене типа или уменьшении размерности поля
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771792
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

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

Все бы хорошо, но таблицы создаются софтом и я не уверен, что если я пересоздам все нужные таблицы руками, они продолжат работать. Софт поддерживает потенциально любую базу данных. В данном конкретном случае - MS SQL. Поэтому и думал, что есть какой-нибудь способ отзеркалить таблицу с небольшими изменениями.

Доступа к внутренним модулям софта у нас, естественно нет. Что там делается - неведомо. Я могу только визуально сравнить оригинальную и мою новую таблицу.

Две конвертнул - вроде работают. Но это конкретно 2 системные таблицы. Там ни индексов, ни наворотов нет (и ID там необязателен - софт создает их и с ID и без - все зависит от настроек). А вот если потребуется конвертнуть какую-нибудь стандартную таблицу с данными, то получится или нет - 50/50...

Дело в том, что MS SQL я занимался очень мало и опыта по нему практически нет.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771798
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,

Размерность или несоответствие имен полей не столь важно (такое может произойти, если клиенты на разных версиях софта). Там больше критично системные установки (типа с ID или без и несоответствие количества полей). Размерность, имена и добавить/удалить поля - не проблема. Для этого есть модуль синхронизации, а вот с ID - он может быть, а может не быть. Но это системная настройка софта.

Соответственно, если в настройках он есть, а в базе нет, то софт пытается его использовать, возникает ошибка и, видимо, при ошибке (он ее не показывает) софт отказывается переключаться. Причем, он даже в списке доступных баз такую базу не показывает...

Клиентов около 100, в каждой таких несоответствующих таблиц по 10-ку...

Ну есть еще вариант, выгрузить таблицы в CSV, софтом пересоздать их из мастер-настроек и, затем, перезалить CSV обратно. Но это все вручную. Пол жизни займет. Потому такую задачу и поставили...
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39771876
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey V Nдумал, что есть какой-нибудь способ отзеркалить таблицу с небольшими изменениями.К сожалению, нет такого, нельзя простой командой поменять поля, или добавить поле в заданное место.

Либо писать скрипт самому (ну, или поискать такой в сети), или воспользоваться готовыми тулзами (но это не подходит, вам же нужно автоматизированное решение).
Sergey V NДве конвертнул - вроде работают. Но это конкретно 2 системные таблицы. Там ни индексов, ни наворотов нет (и ID там необязателен - софт создает их и с ID и без - все зависит от настроек). А вот если потребуется конвертнуть какую-нибудь стандартную таблицу с данными, то получится или нет - 50/50...

Дело в том, что MS SQL я занимался очень мало и опыта по нему практически нет.Нужно сделать стенд (тестовый сервер, на нём 2 базы, в общем, всё как в реальной задаче), и писать/отлаживать скрипт.

Да, работа это немаленькая, и требует квалификации.

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

Вот, заодно её, квалификацию, и получите :-)
Sergey V NНу есть еще вариант, выгрузить таблицы в CSV, софтом пересоздать их из мастер-настроек и, затем, перезалить CSV обратно. Но это все вручную. Пол жизни займет. Потому такую задачу и поставили...Вручную то можно из тулзов.

Например, эталонная база у вас как проект в Visual Studio (SSDT), потом указываете другую базу, вам студия делает скрипт приведения базы в соответствие к эталонной. Вы просматриваете этот скрипт, и если он нормальный, применяете. При этом алгоритм, параметры сравнения, сохраняете в виде шаблона.
Но это да, потребует ручного труда.

Или ещё можно найти какой то софт, Visual Studio не единственный.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39772034
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Спасибо, Алексей. Ну, в общем, примерно так и двигаюсь. Просто думал, ну а вдруг...

Софт не столько кривой, сколько очень древний. Ему около 30 лет. Там на разных этапах его существования, то этот ID был обязателен, потом его обязательность убрали (под опцию). Ну, в итоге, в разных версиях и в зависимости от настроек, он то генерится при созданиии базы, то нет. Все бы ничего, да только вот когда сейчас появилась задача перенести всех в облако, начались проблемы. Встроенная синхронизация этот ID вообще игнорирует. Она сравнивает только основные поля, индексы и тп.

ОК, буду пытаться. Посмотрю что из этого выйдет.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39772187
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey V N,

софт конечно кривой, потому что он зависит от того, в каком порядке сервер выдаёт столбцы, что противоречит парадигме реляционных данных. Чтобы ничего не сломать надо или перезаливать в новые таблицы или мастерить представления.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39772243
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовSergey V N,

софт конечно кривой, потому что он зависит от того, в каком порядке сервер выдаёт столбцы, что противоречит парадигме реляционных данных. Чтобы ничего не сломать надо или перезаливать в новые таблицы или мастерить представления.Вообще софт не кривой, потому что он не зависит от "порядка полей".

И это как раз является проблемой.

У них задача - слить много баз в одну.
Придётся либо приводить базы к эталону перед "слиянием", либо делать слияние так, что бы оно не зависило от порядка полей.
Sergey V NВсе бы ничего, да только вот когда сейчас появилась задача перенести всех в облако, начались проблемы.А вы сделайте софт для слияния, вместо того, что бы приводить все базы к эталону.
ИМХО это намного, намного проще. И дополнительный плюс - вы не трогаете базы клиентов, потому что если их трогать, то из кучи баз что то будет не работать (вадруг клиенты что то поправили, например?)
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39772292
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Не совсем так. Софт может работать практически с любой базой данных, под которую есть прямые драйвера или ODBC. Далеко не все из них SQL-ные. Есть вообще простецкая, но которую можно использовать только для демок. В промышленной эксплуатации ее не рекомендовано устанавливать. Она не слишком фаулт-толерантна и вообще (ну, если клиент уж совсем не хочет платить за что-то более или менее серьезное, ну тогда типа - ладно, используйте). Такие клиенты тоже есть. Но! С ними проще. Модуль синхронизации просто конвертирует базу из одного формата в другой и, естественно, здесь уже создается все как надо (но опять же, согласно настройкам). Но так как в облаке по дефолту этот ID включен, то и база будет сконвертирована и заюзана без проблем. Но таких мало.

Есть базы с уникальным встроенным ID - RECNUM. Вот отсюда все и пошло. Где-то он есть, где-то его нет. Я, так понимаю, все три последние десятилетия разработчики с этим как то боролись. И все работало. Ну а сейчас надивгаются тучи (читай - "облака"). Здесь затычка и приключилась...

Ну а как все допропорядочные селлеры, они решли более не продавать коробки, а продавать подписки.
...
Рейтинг: 0 / 0
Реструктуризация таблицы
    #39772299
Sergey V N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Ну, как вариант. Предложу. Я такие вопросы не решаю.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Реструктуризация таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]