Создание нескольких хранимых процедур в коде C #

#c# #sql

#c# #sql

Вопрос:

Я пытаюсь выполнить скрипт на C #, который создаст несколько хранимых процедур в базе данных SQL 2008.

Я попытался поместить их все в один файл, но при попытке выполнить это с помощью

 Incorrect syntax 'create procedure' must be the only statement in the batch.
  

Если я помещу GO после процедуры создания, если произойдет сбой с синтаксической ошибкой в слове GO .

Код C # выглядит следующим образом;

 using (SqlConnection con = new SqlConnection(conString))
                {
                    con.Open();

                    foreach(string scriptFile in scriptFiles)
                    {
                        var command = con.CreateCommand();
                        command.CommandText = scriptFile;
                        int a = command.ExecuteNonQuery();
                        command.Dispose();
                        if (a == -1) successFlag = true;
                    }

                    con.Close();
                    con.Dispose();
                }
  

Итак, у меня, по сути, есть куча вызовов процедуры Create в одном и том же текстовом файле, который я хочу выполнить в базе данных для создания всех сохраненных процедур.

     Create PROCEDURE [dbo].[msp_AddBulkNewEmployeeUploadDetails]      
    snip
    CREATE PROCEDURE [dbo].[msp_AddNewEmployeeDetails]
    snip
  

Есть ли способ сделать это в одном файле, а не в нескольких файлах?

Ответ №1:

Вам нужно будет разделить каждое определение процедуры на a GO , проанализировать GO (и удалить его) и запустить каждую процедуру в отдельности.

Альтернативой является использование готового инструмента, такого как DBUp.

Все, что вы уже используете для создания своей scriptFiles коллекции, просто нужно выполнить синтаксический анализ.

Наличие 1 файла на хранимую процедуру имеет преимущество: это упрощает управление версиями (и сравнение версий).

Комментарии:

1. Правильно, итак, вы говорите, что мне нужно по существу разделить файл на «GO» и проанализировать каждый раздел по отдельности, верно?