从.net如何在没有大量往返的情况下将许多"批量"的SQL发送到Sql-Server?

Ian*_*ose 5 .net sql-server ado.net sql-server-2008

我们有一些代码读取一组SQL脚本文件,在对它们进行一些处理之后,通过查找"GO"关键字将它们分成批处理,然后使用单独的SqlCommon将每个批处理发送到Sql Server.

有没有更好的方法来做到这一点,所以我们:

  • 没有尽可能多的往返旅行
  • 永远不要让SQL Server等待下一批
  • 跑得更快.

(批处理主要是创建表,索引,视图和存储过程.速度是一个问题,因为我们的集成测试经常调用代码.sql-server常用行工具可能没有安装在运行此代码的机器上.)

Tho*_*mas 2

事实上最快的解决方案是在 GO 上进行分裂。然而,另一种替代方法是使用 SQL 管理对象 (SMO) 并将整个脚本一次性发送到 SQL Server,就像使用 Management Studio 一样。

var connectionString = ConfigurationManager.ConnectionStrings[ connectionStringName ].ConnectionString;
using ( var sqlConnection = new SqlConnection( connectionString ) )
{
    var server = new Server( new ServerConnection( sqlConnection ) );
    server.ConnectionContext.Connect();
    server.ConnectionContext.ExecuteNonQuery( sqlFileContents );
    server.ConnectionContext.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)

SQL Server 管理对象 (SMO)