Как автоматизировать задачу "создание сценариев" в среде SQL Server Management Studio 2008?
Я хотел бы автоматизировать создание сценариев в среде SQL Server Management Studio 2008.
прямо сейчас то, что я делаю :
- щелкните правой кнопкой мыши на моей базе данных, задачи, " создание сценариев..."
- вручную выберите все необходимые параметры экспорта и нажмите "Выбрать все" на вкладке "выбрать объект"
- выбрать папку экспорта
- в конце концов нажмите кнопку "Готово"
есть ли способ автоматизировать это задача?
Edit : я хочу создать создание скрипты, не меняйте скрипты.
13 ответов:
то, что Бранн упоминает из Visual Studio 2008 SP1 Team Suite, - это версия 1.4 мастера публикации базы данных. Он установлен с sql server 2008 (может быть, только профессиональный?) в \Program Files\Microsoft SQL Server\90\Tools\Publishing\1.4. Против вызова в обозревателе сервера просто назвав этот. Вы можете достичь той же функциональности с помощью командной строки, как:
sqlpubwiz help scriptЯ не знаю, если v1.4 имеет те же проблемы, что и v1.1 (пользователи преобразуются в роли, ограничения не создаются в правильном порядке), но это не решение для меня, потому что он не создает объекты сценариев для разных файлов, таких как параметр Tasks->Generate Scripts в SSMS. В настоящее время я использую измененную версию Scriptio (использует API MS SMO) для улучшения замены мастера публикации базы данных (sqlpubwiz.исполняемый.) В настоящее время это не сценарий из командной строки, я мог бы добавить этот вклад в будущем.
Scriptio был первоначально размещен на Блог Билла Грациано, но впоследствии был выпущен в CodePlex Биллом и обновлен другими. Прочитайте обсуждение, чтобы узнать, как компилировать для использования с SQL Server 2008.
EDIT: с тех пор я начал использовать продукт сравнения SQL RedGate для этого. Это очень хорошая замена для всего, что мастер публикации sql должен был быть. В качестве источника выбирается база данных, резервная копия или снимок, а в качестве выходных данных-папка расположение и он сбрасывает все красиво в структуру папок. Это тот же формат, что и их другой продукт, SQL Source Control, использует.
SqlPubwiz имеет очень ограниченные возможности по сравнению с генерацией скриптов в SSMS. В отличие от вариантов, доступных с SMO почти точно соответствуют тем, что в SSMS, предполагая, что это, вероятно, даже тот же код. (Я надеюсь, что MS не написал его дважды!) Есть несколько примеров на MSDN, таких как этот что показывают таблицы сценариев как отдельные объекты. Однако, если вы хотите, чтобы все было правильно написано с помощью "полной" схемы, которая включает в себя " DRI " (декларативный Ссылочная целостность) объекты, такие как внешние ключи, а затем таблицы сценариев по отдельности не работают с зависимостями правильно. Я обнаружил, что необходимо собрать все урны и передать их скриптеру в виде массива. Этот код, измененный из примера, работает для меня (хотя я осмелюсь сказать, что вы могли бы привести его в порядок и прокомментировать его немного больше):
using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Sdk.Sfc; ... // Connect to the local, default instance of SQL Server. Server srv = new Server(); // Reference the database. Database db = srv.Databases["YOURDBHERE"]; Scripter scrp = new Scripter(srv); scrp.Options.ScriptDrops = false; scrp.Options.WithDependencies = true; scrp.Options.Indexes = true; // To include indexes scrp.Options.DriAllConstraints = true; // to include referential constraints in the script scrp.Options.Triggers = true; scrp.Options.FullTextIndexes = true; scrp.Options.NoCollation = false; scrp.Options.Bindings = true; scrp.Options.IncludeIfNotExists = false; scrp.Options.ScriptBatchTerminator = true; scrp.Options.ExtendedProperties = true; scrp.PrefetchObjects = true; // some sources suggest this may speed things up var urns = new List<Urn>(); // Iterate through the tables in database and script each one foreach (Table tb in db.Tables) { // check if the table is not a system table if (tb.IsSystemObject == false) { urns.Add(tb.Urn); } } // Iterate through the views in database and script each one. Display the script. foreach (View view in db.Views) { // check if the view is not a system object if (view.IsSystemObject == false) { urns.Add(view.Urn); } } // Iterate through the stored procedures in database and script each one. Display the script. foreach (StoredProcedure sp in db.StoredProcedures) { // check if the procedure is not a system object if (sp.IsSystemObject == false) { urns.Add(sp.Urn); } } StringBuilder builder = new StringBuilder(); System.Collections.Specialized.StringCollection sc = scrp.Script(urns.ToArray()); foreach (string st in sc) { // It seems each string is a sensible batch, and putting GO after it makes it work in tools like SSMS. // Wrapping each string in an 'exec' statement would work better if using SqlCommand to run the script. builder.AppendLine(st); builder.AppendLine("GO"); } return builder.ToString();
Я написал утилиту командной строки с открытым исходным кодом под названием SchemaZen что делает это. Это намного быстрее, чем сценарии из management studio, и его выход более удобен для управления версиями. Он поддерживает сценарии как схемы, так и данных.
для генерации скриптов выполните:
schemazen.exe script --server localhost --database db --scriptDir c:\somedirзатем для воссоздания базы данных из скриптов выполните:
schemazen.exe create --server localhost --database db --scriptDir c:\somedir
можно использовать объект управления SQL Server (SMO) для автоматизации задач управления SQL Server 2005, включая создание сценариев: http://msdn.microsoft.com/en-us/library/ms162169.aspx.
Если вы разработчик, определенно пойти с SMO. Вот ссылка на класс Scripter, который является вашей отправной точкой:
Я не вижу powershell с SQLPSX, упомянутым в любом из этих ответов... Я лично не играл с ним, но он выглядит красиво простым в использовании и идеально подходит для этого типа задач автоматизации, с такими задачами, как:
Get-SqlDatabase -dbname test -sqlserver server | Get-SqlTable | Get-SqlScripter | Set-Content -Path C:\script.sql Get-SqlDatabase -dbname test -sqlserver server | Get-SqlStoredProcedure | Get-SqlScripter Get-SqlDatabase -dbname test -sqlserver server | Get-SqlView | Get-SqlScripter(ref:http://www.sqlservercentral.com/Forums/Topic1167710-1550-1.aspx#bm1168100)
страница проекта: http://sqlpsx.codeplex.com/
главным преимуществом этого подхода является то, что он сочетает в себе конфигурируемость / настраиваемость использования SMO напрямую, с удобством и ремонтопригодностью использования простого существующего инструмента, такого как мастер публикации базы данных.
в инструментах > параметры > конструкторы > таблицы и конструкторы баз данных есть опция для "автоматического создания сценариев изменений", которая будет генерировать один для каждого изменения, которое вы делаете в момент его сохранения.
вы можете сделать это с помощью кода T-SQL, используя таблицы INFORMATION_SCHEMA.
есть также сторонние инструменты - Мне нравится Apex SQL Script именно для использования, о котором вы говорите. Я запустить его из командной строки.
Если вы хотите, чтобы решение Microsoft вы можете попробовать: Microsoft SQL Server Database Publishing Wizard 1.1
Он создает пакетный процесс, который вы можете запустить в любое время, когда вам нужно перестроить сценарии.
Я использую DB Comparer - его свободный и без суеты сценарий всей БД и может сравнивать с другой БД, а также создавать сценарий Diff . Отлично подходит для разработки сценариев изменения производства. http://www.dbcomparer.com/
существует также Этот простой инструмент командной строки Я строю для моего needs.
http://mycodepad.wordpress.com/2013/11/18/export-ms-sql-database-schema-with-c/Он может экспортировать всю БД, и он пытается экспортировать зашифрованных объектов. Все хранится в папках и отдельных файлах sql для легкого сравнения файлов.
код также доступен на GitHub.
из Visual Studio 2008 SP1 TeamSuite:
на вкладке Обозреватель серверов / подключения к данным есть средство публикации для поставщика, которое выполняет те же действия, что и "мастер публикации базы данных Microsoft SQL Server", но совместимо с MS Sql Server 2008.
Я использую VS 2012 (для DBs на MSSQL Server 2008) compare database имеет возможность сохранить его, сравнение и параметры. Это по существу то, что ваши настройки для доставки. После этого вы можете сделать обновление или создать скрипт.
Я просто считаю, что это немного неудобно загружать его из файла позже(перетаскивание из Проводника windows), поскольку я не вижу файл в обозревателе решений.
Comments