Yonathan1111 Ответов: 1

Простое описание или руководство: smo перенос схемы объектов из источника в пункт назначения


Дорогие все,

Я разрабатываю простое приложение-мастер, которое отображает схему объекта из источника в целевую базу данных. И, я СМО (Майкрософт.От SQLServer.Управления.Smo) библиотека для выполнения сопоставлений. Он создает для таблиц, представлений, storedprocedures и даже полей / столбцов, если они не существуют или пропущены в целевой базе данных.

Проблема, с которой я столкнулся, заключается в том, как переместить или создать поле столбца в целевой таблице со всеми его свойствами, найденными из исходной базы данных?

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

заранее спасибо

Что я уже пробовал:

Таблица tb = dbSource.Таблицы[поле.Родитель];
Майкрософт.От SQLServer.Управления.СМО.Столбец = ТБ.Столбцы[поле.Название];


Таблица tblDest = dbDestination.Таблицы[tb.Name];

if (column != null & tblDest != null)
{
пробовать
{
Microsoft.SqlServer.Management.Smo. Column newColumn =
новый столбец Microsoft.SqlServer.Management.Smo.Column(tblDest, column.Name,
колонка.Тип данных)
{
DefaultSchema = столбец.DefaultSchema,

};

тблест.Столбцы.Добавить (newColumn);
}
catch (исключение e)
{

}

пробовать
{
// сохранение изменений обратно в базу данных
тблест.Изменять();
}
поймать (SmoException экс)
{
бросок экс;
}
}

1 Ответов

Рейтинг:
0

RickZeeland

Смотрите мою улучшенную версию "Учебник по СМО 3 н": Учебник по СМО 3 н - сценариев[^]
Это включает в себя процедуры для генерации ключей, индексов и ограничений.


Yonathan1111

Всем привет,

Я ценю все ваши усилия, чтобы помочь мне, просто чтобы быть ясным, возможно ли вообще создать недостающий столбец в пункте назначения с позицией с исходной позицией, которая поступает из исходной базы данных?

Например: table1 (source) имеет firstId на 2-й позиции, а table1 (destination) имеет три поля или столбца, и я хотел создать недостающий столбец (firstId из источника) в table1 (destination) ровно на 2-й позиции.

Спасибо

RickZeeland

Обычно порядок полей не будет проблемой, но вы можете столкнуться с проблемами, когда делаете такие вещи, как массовый экспорт/импорт в CSV-файлы, где порядок имеет значение.
Если вам действительно нужен тот же порядок полей, я бы предложил создать новую таблицу, создать поля в правильном порядке, скопировать все данные, удалить исходную таблицу и переименовать ее.

Yonathan1111

Дорогой Рикзиленд,

Это очень помогает, теперь я понимаю, что как-то трудно воссоздать поле в пункте назначения с его первоначальным порядком из источника. Я пробовал, но это не сработало, пожалуйста, посмотрите на это, и удаление соответствующей таблицы и ее воссоздание-это не вариант.
напр.:
tblDestination.Столбцы.Add (missingColumn, 2); / / число 2-это позиция, однако либо она создает мне исключение, либо создает его в последнем порядке.

Порядок обязателен, вот почему я настаиваю.

Большое спасибо.