【VBA】基于EXCEL生成Insert语句工具

前言

基于Excel生成INSERT语句工具是为了解决在数据库中插入大量数据时手动编写INSERT语句繁琐和耗时的问题而开发的辅助工具。在软件开发和数据库管理等领域,测试数据是非常重要的,它可以用于测试和验证数据库的性能、功能和准确性。

手动编写INSERT语句来插入大量测试数据是一项繁重和容易出错的任务。当数据量很大时,人工编写INSERT语句需要耗费大量的时间和精力,还容易出现拼写错误、数据格式问题等。而且,如果需要多次插入相同的数据,每次都手动编写同样的INSERT语句非常低效,容易出错。

因此,基于Excel生成INSERT语句工具的出现解决了这些问题。通过该工具,用户只需在Excel中输入表名、字段信息和生成数据条数,工具就能自动根据字段数量、类型和长度生成随机数据,并将其拼接成相应的INSERT语句。这样,用户无需手动编写每个INSERT语句,大大提高了工作效率并减少了错误。

该工具还支持模板设计,用户可以按照数据库语法要求在Excel中创建一个INSERT sheet页,灵活地定制INSERT语句的格式和内容。

工具截图

  • 主画面Sheet
  • insert语句生成Sheet

工具优势

使用基于Excel生成INSERT语句工具有以下几个优势:

  • 提高工作效率。手动编写INSERT语句需要消耗大量的时间和精力,而基于Excel生成INSERT语句工具可以快速生成符合要求的INSERT语句,提高工作效率。
  • 避免手写错误。手动编写INSERT语句容易出现手写错误、格式错误等问题,而基于Excel生成INSERT语句工具可以避免这些问题的发生。
  • 易于管理和维护。基于Excel生成INSERT语句工具简单易用,而且数据和模板都保存在一个Excel文件中,方便管理和维护。
  • 灵活定制。该工具支持用户自定义模板,可以根据不同的要求灵活定制生成INSERT语句的格式和内容,更加方便实用。
  • 易于拓展。该工具可以对不同的数据库进行适配,可以基于已有的模板进行修改和拓展,满足不同项目的需求。

工具介绍

下面是使用基于Excel生成INSERT语句工具的详细操作说明,希望能帮助您轻松快速地生成数据插入语句。

  • 打开Excel,创建一个新的工作表。
  • 将第2行第1列的单元格填写表名,例如"student"。
  • 在第三行填写字段名、第四行填写字段类型、第五行填写字段长度,例如姓名、字符型、20。字段名可以根据需要添加、删除和修改。
  • 将插入数据所需的信息填写在表中,例如A6单元格填写姓名、B6单元格填写年龄,以此类推。需要注意的是,如果填写的是字符型数据,需要使用双引号将数据括起来。
  • 在另一个工作表中创建一个INSERT sheet页,用于生成INSERT语句。可以按照MySQL、SQL Server或其他数据库的语法要求进行模板的设计。
  • 在模板中,使用Excel的函数(如CONCATENATE、TEXT、IF等)将表名、字段名和对应的数据拼接成INSERT语句。使用适当的引号来处理字符串数据。例如,在Oracle中,INSERT语句的格式为:
sql 复制代码
INSERT INTO master."test"("USER_ID", "AGE", "DATE") VALUES ('1Xx72d6wGV', '05', TO_DATE('2023-11-14', 'YYYY-MM-DD'));
  • 复制该公式,并将其应用到每一行的数据中,自动适应相应的字段和数据。可以使用Excel的自动填充功能,方便地将公式应用到多行数据中。
  • 将生成的INSERT语句复制到文本文件或数据库工具中,然后执行插入操作。

工具注意事项

在使用基于Excel生成INSERT语句工具时,以下是一些需要注意的事项:

  • 确保数据准确性:在填写数据时,务必确保数据的准确性和完整性。任何不准确或错误的数据都可能导致生成的INSERT语句有误。
  • 处理特殊字符:如果数据中包含特殊字符(如引号、斜杠等),需要正确处理这些字符,以免影响生成的INSERT语句的语法。
  • 数据类型匹配:确保填写的数据类型与数据库表的字段类型相匹配。如果数据类型不匹配,可能导致生成的INSERT语句执行错误。
  • 字段顺序:在填写字段名和对应数据时,确保顺序一致。字段名和数据的对应关系在生成INSERT语句时非常重要。
  • 数据量控制:根据需要控制生成的数据量,以免生成过多的INSERT语句导致数据库负担过重。
  • 使用合适的模板:根据不同数据库的语法要求,选择合适的模板进行INSERT语句的生成。
  • 检查生成的语句:在复制生成的INSERT语句之前,务必仔细检查语句的格式和内容,确保语句没有错误。

代码片段

Data production按钮

vbnet 复制代码
Private Sub CommandButton2_Click()
    Dim arr() As String
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'A列最后一个非空单元格所在的行号。
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    '最后一个非空单元格所在的列号。
    lastColumn = ws.Cells(3, ws.Columns.Count).End(xlToLeft).Column
    
   '此for是生成多少条数据
    For r = 1 To CInt(ws.Cells(2, 6).Value)
    	'遍历列
        For i = 1 To lastColumn
            '判断是都是decmial类型
            If ws.Cells(4, i).Value = "QUAN" Or ws.Cells(4, i).Value = "DEC" Then
            	'用于将单元格 ws.Cells(r + 5, i) 的格式设置为文本格式的代码。
                ws.Cells(r + 5, i).NumberFormat = "@"
                '判断是否包含逗号
                If InStr(ws.Cells(5, i).Value, ",") > 0 Then
                    '截取
                    arr = Split(ws.Cells(5, i).Value, ",")
                    '赋值,GenerateRandomData()类型处理方法
                    ws.Cells(r + 5, i).Value = CStr(GenerateRandomData(ws.Cells(4, i).Value, CInt(arr(0)) - CInt(arr(1)), CInt(arr(1))))
                Else
                    ws.Cells(r + 5, i).Value = CStr(GenerateRandomData(ws.Cells(4, i).Value, ws.Cells(5, i).Value, 0))
                End If
            Else
                ws.Cells(r + 5, i).Value = GenerateRandomData(ws.Cells(4, i).Value, ws.Cells(5, i).Value, 0)
            End If
        Next i
    Next r
End Sub

GenerateRandomData()类型处理方法

vbnet 复制代码
Function GenerateRandomData(dataType As String, length As Integer, decimalPlaces As Integer) As Variant
    Dim result As Variant
    
    Select Case dataType
        Case "INT4"
            result = Int((10 ^ length - 1) * Rnd)
            
        Case "CHAR", "TIMS", "CUKY"
            Dim validChars As String
            validChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
            
            Dim i As Integer
            For i = 1 To length
                result = result & Mid(validChars, Int((Len(validChars) * Rnd) + 1), 1)
            Next i
            
        Case "DATS"
            Dim todayDate As String
            todayDate = Format(Date, "yyyy-mm-dd")
            result = todayDate
            
        Case "NUMC"
            Dim numcChars As String
            numcChars = "0123456789"
            
            Dim j As Integer
            For j = 1 To length
                result = result & Mid(numcChars, Int((Len(numcChars) * Rnd) + 1), 1)
            Next j
            
        Case "DEC", "QUAN", "CURR"
            Dim minValue As Double
            Dim maxValue As Double
            minValue = 10 ^ (length - decimalPlaces) - 1
            maxValue = 10 ^ length - 10 ^ (length - decimalPlaces)
            result = minValue + Rnd * (maxValue - minValue)
            result = Round(result, decimalPlaces)
            
        Case Else
            result = "Invalid data type."
    End Select
    
    GenerateRandomData = result
End Function

Insert作成按钮

vbnet 复制代码
Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Dim lastRow As Integer
    Dim insertSQL As String
    Dim fieldNames As String
    Dim fieldValues As String
    Dim fieldName As String
    Dim fieldValue As String
    Dim i As Integer
    
 	'获取工作薄
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    Set Insert = ThisWorkbook.Sheets("Insert")
    
 	'A列最后一个非空单元格所在的行号。
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    '最后一个非空单元格所在的列号。
    lastColumn = ws.Cells(3, ws.Columns.Count).End(xlToLeft).Column
    
    '遍历列,拼接列字符串
    For i = 1 To lastColumn
        fieldName = ws.Cells(3, i).Value
        
        
        fieldNames = fieldNames & """" & fieldName & """, "
    Next i
        
        
    fieldNames = Left(fieldNames, Len(fieldNames) - 2)
    Debug.Print fieldNames
    '遍历行    
    For i = 6 To lastRow
        fieldValues = ""
         '遍历列   
        For j = 1 To lastColumn
        	'获取并拼接insert数据
            If ws.Cells(4, j).Value = "DATS" Then
                fieldValue = "TO_DATE('" & ws.Cells(i, j).Value & "', 'YYYY-MM-DD')"
                
            Else
                fieldValue = ws.Cells(i, j).Value
                fieldValue = "'" & Replace(fieldValue, "'", "''") & "'"
            End If
            
            
            fieldValues = fieldValues & fieldValue & ", "
        Next j
        
   
        fieldValues = Left(fieldValues, Len(fieldValues) - 2)
        
		'生成并输出insert 语句
        insertSQL = "INSERT INTO " & ws.Range("A2").Value & "(" & fieldNames & ") VALUES (" & fieldValues & ");"
        
        Insert.Range("A" & i - 5).Value = insertSQL
       
        Debug.Print insertSQL
    Next i
End Sub

结束语

基于Excel生成INSERT语句工具是一个非常实用的辅助工具,它可以帮助用户快速生成大量测试数据的INSERT语句,从而简化操作。在我们的快速变化和发展的数字化时代,数据是至关重要的。测试数据在软件和数据库开发时非常必要,可以验证数据库的性能、准确性和功能。该工具的出现,为数据管理带来了更简单、更快捷的方式。

通过基于Excel生成INSERT语句工具,用户可以非常方便地根据表名、字段信息、生成数据条数等参数生成相应的INSERT语句,从而快速构建测试数据,大大提高了工作效率。该工具的使用非常简便,只需在自定义的模板中粘贴生成的INSERT语句,即可实现数据插入操作。

总之,这个工具对于开发人员、数据库管理员和需要大量测试数据的领域都是非常有用的。它让数据管理变得更加简单、快捷、高效、准确,为实现数据价值发挥提供了一定的保障。通过本文,希望能够让更多人知道并掌握这一工具,节省时间和精力,提高工作效率,从而让数字化时代更加便捷和智能。

希望能帮助到各位 加油!

大鹏一日同风起 扶摇直上九万里!


End

相关推荐
Wangsk1338 小时前
用 Python 批量处理 Excel:从重复值清洗到数据可视化
python·信息可视化·excel·pandas
叶甯11 小时前
【Excel】vlookup使用小结
excel
AI手记叨叨12 小时前
Python分块读取大型Excel文件
python·excel
专注VB编程开发20年12 小时前
用ADO操作EXCEL文件创建表格,删除表格CREATE TABLE,DROP TABLE
服务器·windows·excel·ado·创建表格·删除表格·读写xlsx
_oP_i14 小时前
wps创建编辑excel customHeight 属性不是标准 Excel Open XML导致比对异常
xml·excel·wps
YL雷子1 天前
纯前端使用ExcelJS插件导出Excel
前端·vue·excel
泉城老铁2 天前
EasyPoi实现百万级数据导出的性能优化方案
java·后端·excel
泉城老铁2 天前
Spring Boot 整合 EasyPoi 实现复杂多级表头 Excel 导出的完整方案
java·后端·excel
sql2008help2 天前
数据分页异步后台导出excel
java·excel
小灰灰搞电子2 天前
Qt 使用QtXlsx库处理Excel文件
qt·excel