大Sql的切分执行
2004-11-04 16:44
197 查看
以前一直觉得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 < 0) Then
bGoOn = False
Exit For
Else
iNext += startWord.Length
End If
Next
If (iNext >= 0) Then
iNext -= startWord.Length
End If
If (iNext > 0) Then
ExecuteSql(str.Substring(iStart, iNext - iStart))
Else
ExecuteSql(str.Substring(iStart))
End If
End While
End Sub
startWord参数为每个单独sql语句的开始特征。这种情况一般都是insert语句。这里要注意大小写的问题,否则不会被拆开的,倒不会执行不了。
groupNumber为分组的大小。还没上线测试,现在估计500句,经过实践检验再调整。
单独执行sql的部分ExecuteSql很简单,详情请参考:
/article/4950868.html
'执行大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 < 0) Then
bGoOn = False
Exit For
Else
iNext += startWord.Length
End If
Next
If (iNext >= 0) Then
iNext -= startWord.Length
End If
If (iNext > 0) Then
ExecuteSql(str.Substring(iStart, iNext - iStart))
Else
ExecuteSql(str.Substring(iStart))
End If
End While
End Sub
startWord参数为每个单独sql语句的开始特征。这种情况一般都是insert语句。这里要注意大小写的问题,否则不会被拆开的,倒不会执行不了。
groupNumber为分组的大小。还没上线测试,现在估计500句,经过实践检验再调整。
单独执行sql的部分ExecuteSql很简单,详情请参考:
/article/4950868.html
相关文章推荐
- T-SQL: 三个通用的与日期相关的,辅助按周(星期日是周的最后一天)汇总的自定义函数
- T-SQL: 三个通用的与日期相关的,辅助按周(星期日是周的最后一天)汇总的自定义函数
- 轻量级的数据库访问类 041104版
- 关于jsp连接oracle数据库的问题
- 关于用W2K AD SERVER 和SQL2000企业版安装双机
- 关于数据库名(db_name)、实例名(instance_name)、ORACLE_SID
- Xml2OleDb简介
- 交叉表的实现
- 通过 OLE DB 连接 MSSQL Server时出现乱码的解决方法
- 用c#备份和还原sql server 2000数据库
- 上传下载图片到SQl
- MySQL 开始!
- 最近学习了一下 TeX 和 metapost
- 请问怎样书写SQL脚本,以判断某个路径下的某个文件是否存在?
- oracle815 odbc drvier与ado的不兼容
- .NET的事务控制
- 重设标识列(identity)种子
- 请问,怎么用SQL server 做全文检索
- 利用Oracle数据库存储和分析Unix操作系统的性能
- 郁闷,连接sqlserver老出错,请教高手!