大Sql的切分执行

    以前一直觉得sql应该减少传递次数,减少和数据库的通信,这样可以提高效率。但现在发现,凡事都有个度的问题,由于业务需要一次性插入大概4000条数据,如果有并发操作,很容易就造成sql超时错误。于是就写了一个能够拆分大sql执行的函数。

     ' 执行大sql语句,传入为StringBuilder以提高效率。
     Public   Shared   Sub ExecuteBigSql() Sub ExecuteBigSql(ByRef sbSql As System.Text.StringBuilder, Optional ByVal startWord As String = "insert into"Optional ByVal groupNumber As Integer = 500)
        
Dim str As String
        
Dim bGoOn As Boolean = True
        
Dim iStart As Integer = 0
        
Dim iNext As Integer = 0
        
str = sbSql.ToString()
        
While (bGoOn)
            iStart 
= iNext
            
For i As Integer = 0 To groupNumber
                iNext 
= str.IndexOf(startWord, iNext)
                
If (iNext < 0Then
                    bGoOn 
= False
                    
Exit For
                
Else
                    iNext 
+= startWord.Length
                
End If
            
Next
            
If (iNext >= 0Then
                iNext 
-= startWord.Length
            
End If

            
If (iNext > 0Then
                ExecuteSql(
str.Substring(iStart, iNext - iStart))
            
Else
                ExecuteSql(
str.Substring(iStart))
            
End If
        
End While
    
End Sub


startWord参数为每个单独sql语句的开始特征。这种情况一般都是insert语句。这里要注意大小写的问题,否则不会被拆开的,倒不会执行不了。
groupNumber为分组的大小。还没上线测试,现在估计500句,经过实践检验再调整。
单独执行sql的部分ExecuteSql很简单,详情请参考:
http://www.cnblogs.com/squirrel_sc/archive/2004/11/04/60447.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值