在C#中高效执行包含GO命令的大型SQL脚本
问题:
使用SqlCommand.ExecuteNonQuery()
执行包含多个由GO语句分隔的批处理的大型SQL脚本具有挑战性,因为它将GO解释为无效语法。
解决方案1:多个批处理
一种方法是根据GO行将SQL脚本拆分为单个批处理,并分别执行每个批处理。虽然此方法有效,但对于大型脚本而言,它可能很繁琐且容易出错。
解决方案2:SQL Server Management Objects (SMO)
更有效的解决方案是利用SQL Server Management Objects (SMO),它原生支持GO命令分隔符。
示例代码:
<code class="language-csharp">public static void Main() { // SQL连接字符串 string sqlConnectionString = "Integrated Security=SSPI;" + "Persist Security Info=True;Initial Catalog=Northwind;Data Source=(local)"; // 从目录获取SQL脚本 DirectoryInfo di = new DirectoryInfo("c:\temp\sqltest\"); FileInfo[] rgFiles = di.GetFiles("*.sql"); // 使用SMO执行每个脚本 foreach (FileInfo fi in rgFiles) { string script = File.ReadAllText(fi.FullName); using (SqlConnection connection = new SqlConnection(sqlConnectionString)) { Server server = new Server(new ServerConnection(connection)); server.ConnectionContext.ExecuteNonQuery(script); } } }</code>
附加库:
另一个选择是使用Phil Haack的库,它封装了使用GO分隔符执行SQL脚本的功能:https://www.php.cn/link/3cdad14c5d7c1e1fa307772a876b42d7
以上是如何在C#中使用GO命令高效执行大型SQL脚本?的详细内容。更多信息请关注PHP中文网其他相关文章!