如何运行具有大量行的SQL文件?

时间:2013-04-18 08:35:51

标签: c# sql-server-2008

我有一个拥有超过10k行代码的SQL文件(filenameScript)。每个SQL块都以GO开头,以GO结束。在从C#执行文件时,我在GO语句附近遇到异常。但是当我在SQL服务器上运行相同的文件时,它运行正常。

con.ConnectionString = sqlconn;
FileInfo file = new FileInfo(filenameScript);
string script = file.OpenText().ReadToEnd();
SqlCommand command = new SqlCommand(script, con);
con.Open();
command.ExecuteNonQuery();
Close();

我认为ExecuteNonQuerry无法处理这么多\n\r\t因为文件读取存储在一行中有很多\n }和\r。 有没有其他方法可以做同样的事情? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

不,问题不是文件的长度,也不存在\r和/或\n个字符。这是因为使用该方法执行SQL只能运行一个批处理,而具有GO语句的脚本会导致多个批处理。

一种可能性是将关键字GO上的文本拆分并执行每个单独的部分:

con.ConnectionString = sqlconn;
var commands = File.ReadAllText(filenameScript).Split(new []{"GO"},StringSplitOption.RemoveEmptyEntries);
con.Open();
foreach(var batch in commands)
{
    SqlCommand command = new SqlCommand(batch, con);
    command.ExecuteNonQuery();
}
con.Close()

此外,您可以将其包装在Transaction中以确保所有批次都以原子方式执行。

此SO问题还提供了另一种选择:How do I execute a large SQL script (with GO commands) from c#