请各位高手指点:使用BCB 6.0 ADOQuery遇到的问题
本人正在写一个使用ADOQuery将一台sqlserver 7.0服务器中的表的数据实时复制到另一台sqlserver 7.0服务器中的表中的小程序,遇到了效率不高及cpu利用率高的问题。(我没有使用sqlserver中的replication服务,因为不少行家说那东西不成熟)。经本人分析,ADOQuery运行时会产生大量的sql查询,下面是一个例子(使用sql server profiler 查看得到):
[一] MyQuery->SQL->Add("select count(*) as num,
isnull(max(rec_num),0) as rec from MyTable") 结果:
(1)ExistingConnection
(2)declare @P1 int
set @P1=NULL
exec sp_prepare @P1 output, NULL, N'select count(*) as num,
isnull(max(rec_num),0) as rec from MyTable', 1
select @P1
[二] MyQuery->Open()结果;
(1)sp_unprepare 1
(2)SET NO_BROWSETABLE ON
(3)declare @P1 int
set @P1=NULL
exec sp_prepare @P1 output, NULL, N'select count(*) as num,
isnull(max(rec_num),0) as rec from MyTable', 1
select @P1
(4)sp_execute 2
(5)Connect
ExistingConnection
(6)SET NO_BROWSETABLE ON
(7)declare @P1 int
set @P1=NULL
exec sp_prepare @P1 output, NULL, N'SELECT * FROM MyTable', 1
select @P1
(8)Disconnect
[三] MyQuery->Close()结果
无反应
我使用的provider是microsoft OLE DB provider for SQL Server。不论将
MyQuery->Prepared设为True或False,结果都是一样。经常可以看到connect及disconnect的情况。对一个简单的查询来说这未免弄得太复杂了!
我很相知道怎样让上述过程总共只产生一个我需要的查询,也就是select count(*) as num, isnull(max(rec_num),0) as rec from MyTable,其他东西都不出现?
请多执教!
问题点数:0、回复次数:0Top




