Как написать сценарий ограничения первичного ключа из существующей базы данных - PullRequest
0 голосов
/ 06 марта 2012

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

Мне удалось создать сценарии с помощью функции Генерировать сценарии , но они содержат только первичные ключи внутри операторов CREATE.

Мне нужно получить их как операторы ALTER TABLE, чтобы я мог сбросить ключи, очистить базу данных, вставить новые данные и восстановить все ключи, ограничения и т. Д.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Powershell и SMO ​​станут вашими друзьями здесь:

$option_drop = new-object Microsoft.SqlServer.Management.Smo.ScriptingOptions;
$option_drop.ScriptDrops = $true;

"" > drop_primary_keys.sql
"" > create_primary_keys.sql

$server = new-object Microsoft.SqlServer.Management.Smo.Server ".";
$db = $server.Databases['AdventureWorks'];
foreach ($table in $db.Tables) {
    foreach ($index in $table.Indexes) {
        if ($index.IndexKeyType -eq "DriPrimaryKey") {
            $index.Script( $option_drop ) >> drop_primary_keys.sql
            $index.Script() >> create_primary_keys.sql
        }
    }
}

Пара замечаний здесь:

  • Запуск этого скрипта уничтожит все существующие файлы с именем "drop_primary_keys.sql "и" create_primary_keys.sql ", поэтому действуйте осторожно
  • Скрипт не учитывает внешние ключи, поскольку вы сказали, что у вас уже есть способ сделать это.
  • Возможно, вам придется настроить объект ScriptingOptions в соответствии с вашими потребностями.В частности, я использую значения по умолчанию при создании, поэтому вам может понадобиться создать еще один объект ScriptingOptions и установить любые параметры, которые вы считаете подходящими.

Кроме этого, хорошая охота.

0 голосов
/ 06 марта 2012

Msdn имеет статью об отключении / включении триггеров и внешних ключей:

http://msdn.microsoft.com/en-us/magazine/cc163442.aspx

...