Создание сценариев из проекта БД с использованием Visual Studio 2013 - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть требование, когда мне нужно создавать отдельные файлы сценариев для процедур, функций и представлений при создании сборки.Мы следуем методу, где отбрасываем все объекты, а затем воссоздаем их снова.Это происходит каждый раз, когда мы выпускаем сборку.Теперь мне нужно построить проект и извлечь файлы SQL, чтобы сначала отбросить объекты, а затем создать сценарии для создания объектов.

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

Благодарим вас, если кто-то из вас поделится подходом и деталями для достижения того же.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Следующий C #, использующий SMO объекты в генерации скриптов CREATE и DROP.Как вы заметите, операторы DROP выполняются внутри кода, а CREATE DDL - через SMO.В этом примере используются таблицы, но то же самое можно сделать для представлений, хранимых процедур, функций и т. Д., Изменив класс Table (в цикле foreach) на тип объекта, который необходимо записать в сценарий.Если вы решите использовать этот подход, потребуется добавить ссылки на Microsoft.SqlServer.ConnectionInfo, System.Collections.Specialized, Microsoft.SqlServer.Management.Sdk.Sfc и Microsoft.SqlServer.Smo.При необходимости операторы DROP / CREATE могут использоваться как текст для объекта SqlCommand для дальнейшей автоматизации этого процесса.

                //set server and database
                Server srv = new Server(@"YourServer");
                //to use Windows Authentication
                srv.ConnectionContext.LoginSecure = true;

                Database db = srv.Databases["YourDatabase"];

                Scripter script = new Scripter(srv);
                ScriptingOptions scriptOpt = new ScriptingOptions();
                string dropFilePath = @"C:\Test\DROP_SCRIPT_";
                string createFilePath = @"C:\CREATE_SCRIPT_";
                string dropObjPt1 = "IF (OBJECT_ID(N'YourDatabase.YourSchema.";
                string dropObjPt2 = "') IS NOT NULL) DROP TABLE ";

                //this can changed to views, functions, stored procedures, etc.
                foreach (Table t in db.Tables)
                {
                    //check for system objects
                    //use t.Name to filter table name if needed
                    if (!t.IsSystemObject)
                    {
                        File.WriteAllText(dropFilePath + t.Name + ".sql", dropObjPt1 + t.Name + dropObjPt2 + t.Name);
                    }
                }
                foreach (Table t in db.Tables)
                {
                    if (!t.IsSystemObject)
                    {
                        StringCollection sc = t.Script(scriptOpt);
                        foreach (string s in sc)
                        {
                            File.WriteAllText(createFilePath + t.Name + ".sql", s);
                        }
                    }
                }
0 голосов
/ 30 ноября 2018

Не совсем с использованием Visual Studio, но Management Studio может легко помочь вам в этом.Из вашего проекта обновите вашу копию базы данных и подключитесь к ней с помощью SSMS.Затем используйте мастер Generate Scripts (щелкните правой кнопкой мыши базу данных, Задачи -> Создать сценарии ...), чтобы создать сценарии для ваших представлений, процедур и функций:

enter image description here

На следующей странице в разделе «Дополнительно» убедитесь, что для Check for object existance установлено значение True, Script DROP and CREATE равно Script DROP and CREATE, а Script for Server Version соответствует версии вашего SQL Server (посколькуможет не поддерживает DROP IF EXISTS).Это создаст скрипт для удаления и создания объектов, которые вы выбрали в начале.При необходимости вы можете настроить список, например, чтобы исключить некоторые объекты.

...