代码之家  ›  专栏  ›  技术社区  ›  Jeff

执行批处理TSQL脚本的SQL SMO

  •  5
  • Jeff  · 技术社区  · 14 年前

    我正在使用SMO执行一个批处理SQL脚本。在Management Studio中,脚本大约在2秒钟内执行。使用下面的代码,大约需要15秒。

    var connectionString = GetConnectionString();
    // need to use master because the DB in the connection string no longer exists  
    // because we dropped it already
    var builder = new SqlConnectionStringBuilder(connectionString) 
    { 
        InitialCatalog = "master" 
    };
    
    using (var sqlConnection = new SqlConnection(builder.ToString()))
    {
        var serverConnection = new ServerConnection(sqlConnection);
        var server = new Server(serverConnection);
    
        // hangs here for about 12 -15 seconds
        server.ConnectionContext.ExecuteNonQuery(sql);  
    }
    

    有人对此有任何经验,或者有人建议为什么SMO会运行得这么慢?

    2 回复  |  直到 10 年前
        1
  •  4
  •   Pavel Urbančík    14 年前

    斯莫做了很多奇怪的事。。后台的东西,这是您为能够以面向对象的方式处理服务器/数据库对象而付出的代价。
    既然您没有使用SMO的面向对象功能,为什么不完全忽略SMO并通过普通ADO运行脚本呢?

        2
  •  0
  •   blorkfish    14 年前

    将记录上载到数据库的最佳和最快的方法是通过SqlBulkCopy。
    尤其是当你的脚本是1000多条记录时-这将大大提高速度。