如何运行SQL文件有大量的行
本文关键字:文件 SQL 何运行 运行 | 更新日期: 2023-09-27 18:09:52
我有一个SQL文件(filenameScript)有超过10k行代码。每个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
。还有其他的方法吗?
不,问题不是文件的长度,也不是'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
中,以确保所有批处理都自动执行。