#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» и проанализировать каждый раздел по отдельности, верно?