2011-05-24 62 views
0

我在跟随http://www.mssqltips.com/tip.asp?tip=1910,下面的代码实际上可以工作,但需要大约90秒才能运行。数据库模式有少于10个(相当直接)的表。我不确定为什么需要这么长时间。有关如何调试的建议?SQL Server SMO TransferData()运行缓慢

var host = "192.168..."; 
var user = "username"; 
var pass = "password"; 
var srcDbName = "srcDbName"; 
var dstDbName = "dstDbName"; 

var server = new Server(new ServerConnection(host, user, pass)); 

var srcDb = server.Databases[srcDbName]; 
var dstDb = new Database(server, dstDbName); 

dstDb.Create(); 

var transfer = new Transfer(srcDb); 

transfer.CopyAllTables = true; 
transfer.Options.DriAll = true; 
transfer.Options.ContinueScriptingOnError = false; 

transfer.DestinationDatabase = dstDbName; 
transfer.DestinationServer = server.Name; 
transfer.DestinationLoginSecure = false; 
transfer.DestinationLogin = user; 
transfer.DestinationPassword = pass; 

transfer.TransferData(); 

回答

0

我认为你应该保留这段代码。你无法改进它。据我所知,您希望将表/模式从一个数据库转移到其他数据库。

下面,我建议选择:

链接服务器

从SQL 2000,你应该能够直接作为链接服务器连接到其他数据库。在专业人员专栏中,如果您没有其他技术技能(例如DTS或SSIS),这种直接访问方式可以很容易地工作,但获得初始设置权并且可能存在安全问题可能很复杂/问题。

DTS

DTS打包在SQL 2000和这种任务的制成。如果编写正确,您的DTS包可以具有良好的错误处理并且可以重新运行/可重用。

SSIS

SSIS实际上是与SQL 2005及以上的包装,但你可以把它连接到其他数据库。它基本上是更好的DTS版本。