一张表中有一个MSGID字段是Varchar(50),里面数据可能有300万,而且以后会更多,我现在通过web服务每次从对方那边获取500条信息,然后循环这个500条信息的MSGID,然后根据这个MSGID去修改表中对应的另外几个字段,
也就是说我循环了500次,数据库编辑了500次,这个效率好低,执行完差不多要20秒左右,想请问各位有什么好的办法解决吗?

解决方案 »

  1.   

    事务
    SqlBulkCopy
    拼接成一条SQL应该都比循环快点
      

  2.   

    到存储过程中split然后循环?那参数类型是什么呢?而且,参数长度有限制的把?
      

  3.   

    参数类型为varchar(max)
    好像是8000个字符长度
      

  4.   

    如何拼接的?SqlBulkCopy需要select的语句的把,可没有规律呀!
      

  5.   

    是啊,因为更新的字段不是1,2个,好多个信息,肯定有内容会超过这长度的,所以当参数传肯定不行了!
    你不能定义5个参数吗?一个参数负责100条记录(100*50=5000)
    怎么定义?举个简单的例子给我看看。
    就拿两个字段来说,MSGID和Address Msgid为5-10位的字符串,Address为地址,长度不定,把@msgID和@Address当参数传递吗?参数如何定义显示呢?把500个MSGID和ADDRESS用逗号隔开当字符串传递吗?
      

  6.   

    create proc p_DoData
       @msgID varchar(max),
       @Address varchar(max)
    as 
    begin
    ....
    end
      

  7.   

    Address参数肯定会超过8000的,怎么办?就算传进去 ,是不是分割循环?