本帖最后由 jacky_lu6 于 2010-02-10 16:59:29 编辑

解决方案 »

  1.   

    怎么没人回复啊?还是SqlServer fetch本身就很慢?
      

  2.   

    select card_number,account_number,card_priority,card_priority_class,1 order_id into #tmp_lujq
    from temp_cards
    where account_number in(
        select account_number from temp_cards
            group by account_number
            having count(*) > 1   --(卡号不唯一,即多卡)
    )--- 首先:这条语句改写为exists语句!
      

  3.   

    set @last_account_number = 0-- 为什么这个赋值语句要在游标打开后再赋值呢?
      

  4.   

        if @last_account_number != @account_number-- 直接改为: if @account_number != 0
    -- 不行吗?
      

  5.   

    -- 呵呵:其实一个SQL语句就能全部搞定的事情,楼主故意整的这么复杂......
      

  6.   

    我是LZ,这段sql主要是fetch以后处理过程比较慢,有没有什么对游标进行优化的?
      

  7.   

    我是楼主。
    咨询过了……貌似SQL SERVER 2005的游标就这个效率了……
    SQL SERVER好慢啊!
    用DTSX从文件加载数据到数据表,20W的数据需要20多分钟!
    游标也不快。
    以前用ORACLE比这个快多了!
    到底是SQL SERVER本来就是这么慢吞吞还是我配置不对?
    硬件应该没问题的!HP 580的机器,16core和CPU,8G内存!
      

  8.   

    20W要20分钟,这不是开玩笑吗......一定有其他原因的
    首先 20W数据的文件有多大?有时候20W数据比1000W数据还大的......假如真的太慢,可以尝试用C++,通过COM,ODBC写入数据库吧
      

  9.   

    正如7樓所說在MSSQL中使用遊標本來就不是什麽好主意MSSQL中的遊標,,會對每一行發起一個單獨的查詢
    也就說,,你20W行就會查詢20W次
    不慢很奇怪,,,不過我個人覺得遊標一般來説是可以被替代的
    除非是需要執行比較複雜的存儲過程只是顯示數據或更新數據,,,都是可以避免遊標的所以樓主還是直接貼出表結構,再貼出想實現的效果,我們幫你看看有什麽辦法吧