Как установить 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 из-за отношения Что касается меня, лучший способ убедиться, что у вас есть тот же объект базы данных, это использовать резервное копирование базы данных.