我试图在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();
}
所以我基本上在同一个txt文件中有一堆Create Procedure调用,我想在数据库上执行它来创建所有存储过程。
Create PROCEDURE [dbo].[msp_AddBulkNewEmployeeUploadDetails]
snip
CREATE PROCEDURE [dbo].[msp_AddNewEmployeeDetails]
snip
有没有办法在单个文件中而不是在多个文件中执行此操作?
答案 0 :(得分:1)
您需要将每个过程定义与GO
分开,解析GO
(并将其删除)并单独运行每个过程。
另一种方法是使用像DBUp这样的预卷工具。
无论您已经使用什么来创建scriptFiles
集合,只需要进行GO解析。
每个存储过程有一个文件有一个好处:它使版本控制(和版本比较)更容易。