完成超长SQL语句执行前拆分

在VB 中执行SQL语句时,经常会出现SQL 语句太长 (我测的不能超过40000字符)而使得SQL语句在VB 程序中不能成功执行,但在SQL 查询分析 器中是可以执行的,为解决这个问题,开发了这个函数。 ### 完成超长SQL语句执行前拆分 #### 概述 在使用Visual Basic (简称VB)进行数据库操作时,可能会遇到因为SQL语句过长而导致无法正常执行的问题。这种情况下,即使该SQL语句可以在SQL Server的查询分析器中成功运行,但在VB程序中却会因为长度限制而失败。为了克服这一限制,本文介绍了一个专门用于将超长SQL语句拆分为多个较小SQL语句的方法。 #### 核心功能解析 ##### 函数定义 该方法通过一个名为`splitSql`的函数实现。其功能是接收三个参数: - `SqlStr`:需要被处理的原始SQL语句。 - `keyWordSql`:标识SQL语句中的关键字(例如INSERT或UPDATE),用于确保每个分割后的SQL语句的完整性。 - `SqlMaxLen`:表示单个SQL语句的最大长度,如果原始SQL语句超过了这个长度,则会被拆分。 ##### 处理流程 1. **初始化**:首先判断原始SQL语句是否已经小于最大长度限制。如果是,则无需拆分,直接返回原始SQL语句;如果不是,则继续后续处理。 2. **计算分割次数**:根据原始SQL语句的长度与指定的最大长度,计算出需要分割的次数。 3. **循环拆分**: - 对于每一个分割段,从原始SQL语句中提取相应长度的子串。 - 检查子串的结尾部分是否包含了指定的关键字(例如INSERT或UPDATE)。如果包含,则直接使用该子串作为分割结果;如果不包含,则继续向后查找直到找到该关键字,并将其包含进来。 4. **结果返回**:将所有分割后的SQL语句存入数组并返回。 #### 示例代码解析 ```vb Public Function splitSql(SqlStr As String, keyWordSql As String, SqlMaxLen As Double) As String() Dim i As Integer Dim TemStr As String Dim Arrl As Integer Dim ExtenLen As Double Dim temarr() As String Dim Pos As Double ' 如果原始SQL语句长度未超过限制,则直接返回 If SqlMaxLen > Len(Trim(SqlStr)) Then ReDim Preserve temarr(1) temarr(1) = SqlStr Exit Function End If ' 限制最大长度不超过20000 If SqlMaxLen > 20000 Then SqlMaxLen = 20000 End If ' 计算分割次数 Arrl = Int(Len(SqlStr) / SqlMaxLen) If Arrl * SqlMaxLen < Len(SqlStr) Then Arrl = Arrl + 1 End If ' 开始位置 Pos = 1 For i = 1 To Arrl If Pos > Len(SqlStr) Then Exit Function ReDim Preserve temarr(i) TemStr = Mid(SqlStr, Pos, SqlMaxLen) ' 检查是否包含关键字 If LCase(Left(Trim(Mid(SqlStr, Pos + SqlMaxLen, SqlMaxLen)), Len(keyWordSql))) = LCase(keyWordSql) Then temarr(i) = TemStr Pos = SqlMaxLen + 1 Else ExtenLen = InStr(LCase(Mid(SqlStr, Pos + SqlMaxLen, SqlMaxLen)), LCase(keyWordSql)) TemStr = Mid(SqlStr, Pos, SqlMaxLen + ExtenLen - 1) Pos = SqlMaxLen + ExtenLen + Pos - 1 temarr(i) = TemStr End If Next ' 返回结果 splitSql = temarr End Function ``` #### 使用示例 假设我们有一个SQL语句,其长度超过了40000个字符。我们可以调用`splitSql`函数,并传入以下参数: - `SqlStr`:完整的SQL语句字符串。 - `keyWordSql`:关键字“INSERT”或“UPDATE”,这取决于SQL语句的类型。 - `SqlMaxLen`:希望的最大SQL语句长度,例如设置为20000。 该函数将返回一个数组,其中包含了按照指定长度分割后的SQL语句。这些SQL语句可以分别执行,从而解决了因长度限制而导致的执行问题。 #### 结论 对于那些使用VB进行数据库编程的开发者来说,当面对超长SQL语句时,`splitSql`函数提供了一种有效的解决方案。通过这种方法,可以轻松地避免由于SQL语句过长而导致的执行错误,从而提高程序的稳定性和可靠性。



























'SqlStr 要拆分的SQL 字符串
'keyWordSql insert or update
'SqlMaxLen 拆分的最大长度
'''函数适用于 除关键字 嵌套之外的SQL 语句拆分
'返回字符串数组
Public Function splitSql(SqlStr As String, keyWordSql As String, SqlMaxLen As Double) As String()
Dim i As Integer
Dim TemStr As String
Dim Arrl As Integer
Dim ExtenLen As Double
Dim temarr() As String
Dim Pos As Double
If SqlMaxLen > Len(Trim(SqlStr)) Then
ReDim Preserve temarr(1)
temarr(1) = SqlStr
Exit Function
End If
If SqlMaxLen > 20000 Then
SqlMaxLen = 20000
End If
Arrl = Int(Len(SqlStr) / SqlMaxLen)
If Arrl * SqlMaxLen < Len(SqlStr) Then
Arrl = Arrl + 1
End If
Pos = 1
For i = 1 To Arrl
If Pos > Len(SqlStr) Then Exit Function

- 图_钉2013-05-16先谢谢,不过越长的值应该用command提交吧
- smartfoolknight2013-06-26太贵而且不好用
- 虎19802013-10-25这个资源确实很贵,却是解决简单问题
- 小豆冰棍2014-01-09太贵了。不过还是谢谢。
- 一节州子2013-02-05谢谢这个死贵的资源让我看到了一个解决sql太长的方法,现在正在比较在程序里直接将条件分割快还是楼主说的好

- 粉丝: 13
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 工程材料习题渭水学子网某汽车大学学生门户网站.docx
- 项目1单片机开发系统软件使用.pptx
- 云计算与游戏游戏行业运营数据分析课件.pptx
- 关于深圳某地产广州合生创展中海地产管理模式及软件应用考察报.docx
- 基于PLC的电动机顺序起动停止控制设计汇总.doc
- 专业网络营销策划宝典.doc
- 微软课堂-Project2000与IT项目管理.pptx
- 项目经理如何开展实施项目管理.doc
- 机关单位网络与信息安全应急预案.doc
- 专题讲座资料(2021-2022年)关于社交软件中分组功能的分析.docx
- 福建省施工企业“三类人员”网络继续教育培训班测试题.doc
- 模具CAD课程设计指导书.doc
- 网络安全学习心得体会.doc
- 拓尊网络企业网站建设方案书.doc
- 西安交大项目管理MBA课件.ppt
- 数据库原理及应用教案数据库的管理.pptx


