Как установить SMO ScriptingOptions, чтобы гарантировать точную копию таблицы?
Что я пытаюсь сделать: Создайте SQL script с помощью С#, чтобы создать точную копию существующей таблицы.
Мой вопрос:. Как бы вы определили параметры в scriptingOptions, чтобы гарантировать, что полученный script будет создавать 100% точную копию таблицы? Есть 78 вариантов, и не понятно, как это сделать. Первоначально, я думал, вызывая table.Script() без передачи каких-либо ScriptingOptions, что я мог бы получить точную копию моей таблицы, но это не делает трюк (например, индексы не кодируются, если они не указаны в параметры сценариев). Кажется, что мне нужно вручную указать каждое свойство в ScriptingOptions, чтобы получить то, что я хочу. Какие из них я могу получить, чтобы получить желаемый результат? Невозможно просто скопировать таблицу точно.
Доступны доступные сценарии. Здесь представлены все доступные опции: http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.scriptingoptions_properties.aspx
Мой код:
Server server = new Server("XXX");
Database database = new Database();
database = server.Databases["YYY"];
Table table = database.Tables["ZZZ", @"PPP"];
ScriptingOptions scriptingOptions = new ScriptingOptions();
//Define properties in scriptingOptions
StringCollection result = table.Script(scriptingOptions);
var script = "";
foreach (var line in result) {
script += line;
}
System.IO.StreamWriter fs = System.IO.File.CreateText(@"QQQ");
fs.Write(script);
fs.Close();
Ответы
Ответ 1
Вы хотите установить следующее.
- ClusteredIndexes = true
- По умолчанию = true
- FullTextIndexes = true
- Индексы = истина
- NonClusteredIndexes = true
- SchemaQualify = true (если вы хотите script в текущей схеме)
- ScriptData = true (если вы хотите скопировать данные)
- ScriptDrops = true (это приведет к удалению таблицы в целевой базе данных до ее создания)
- ScriptSchema = true (если вы хотите, чтобы script он был в текущей схеме)
- Статистика = true
- Триггеры = истина
- WithDependencies = true (если вы хотите script зависимые объекты)
- DriAll = true (действия ссылочной целостности скриптов, такие как не разрешать INSERT в дочернюю таблицу, если ключ родительской таблицы не существует)
Ответ 2
Я использовал smo, и ошибка в том, что вы должны
- рассмотрите все объекты базы данных из-за взаимосвязи между ними. при написании таблицы у вас есть script весь объект безопасности, внешние ключи, расширенные свойства и т.д.
- определить правильный порядок для объектов script из-за отношения
Что касается меня, лучший способ убедиться, что у вас есть тот же объект базы данных, это использовать резервное копирование базы данных.