你的insert一条以后就调用update是不合理的。
你可以选择ADO的批更新(Batch Update),速度会快些。

解决方案 »

  1.   

    在客户端最这种数据传输是合不来的,如论如何数据都是慢的,不如这样,大量数据传输最好用块复制(buld copy),可以使用sqlserver的dts统一将access的数据转到sqlserver中去,这一步应该很快。然后再服务器段建立存储过程实现你的要求不就行了吗?
      

  2.   

    如果在程序中进行调用,比如vb的ado,该如何使用块复制?数据已经在服务器上,这时候调用存储过程,但是速度反而不如
    我使用access商进行相应的变换,变换逻辑使用vb实现。
    是否是因为sqlserver 建立在98上的缘故?CREATE PROCEDURE sunwei_proc1 ASdeclare @str組合コード varchar(5),@str施設コード varchar(2),@str施設NO varchar(6),@lng金額 int,@str開始年月 varchar(7)
    declare cursor_開始年月 cursor for 
    select 組合コード,施設コード,施設NO,金額,min(請求年月) from sunwei_temp1 group by
    組合コード,施設コード,施設NO,金額open cursor_開始年月
    -------------------
    fetch next from cursor_開始年月 into @str組合コード,@str施設コード,@str施設NO,@lng金額,@str開始年月
    BEGIN TRANSACTION 
    update sunwei_temp1
    set 開始年月=@str開始年月
    where 組合コード=@str組合コード and 施設コード=@str施設コード
    and 施設NO=@str施設NO and 金額=@lng金額
    -------------------
    if @@error<>0
    rollback TRANSACTION
    else
    commit TRANSACTION
    -------------------
    while ( cursor_status('variable','cursor_開始年月')=0 )
    begin
    fetch next from cursor_開始年月 into @str組合コード,@str施設コード,@str施設NO,@lng金額,@str開始年月
    begin TRANSACTION
    update sunwei_temp1
    set 開始年月=@str開始年月
    where 組合コード=@str組合コード and 施設コード=@str施設コード
    and 施設NO=@str施設NO and 金額=@lng金額
    if @@error<>0
    rollback TRANSACTION
    else
    commit TRANSACTION
    end -------------------
    close cursor_開始年月
    deallocate cursor_開始年月
    -------------------
    go
      

  3.   

    可以这样,在服务器上事先建立好DTS(数据传输包),然后在vb中执行,若您的sqlserver和客户端工具在同一台机器上.可以用vb得shell函数,如下:
    shell("dtsrun /Sservername /Uusername /Ppassword /Ndtspackagename")
    比如,我先建立一个dts package名为 mytest,我的server名字:jack,用户用sa,则:
    shell("dtsrun /Sjack /Ujack /P /Nmytest")
    当然了你的设置路径到C:\Program Files\Microsoft SQL Server\80\Tools\Binn
    若不在一台机器上,可以使用
    在vb中调用扩展系统存储过程xp_cmdshell调用,一样的