如何运行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。还有其他的方法吗?

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

不,问题不是文件的长度,也不是'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中,以确保所有批处理都自动执行。

问题:我如何从c#
执行大型SQL脚本(使用GO命令)