• 【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语句的格式为:
    INSERT INTO master."test"("USER_ID", "AGE", "DATE") VALUES ('1Xx72d6wGV', '05', TO_DATE('2023-11-14', 'YYYY-MM-DD'));
    
    • 1
    • 复制该公式,并将其应用到每一行的数据中,自动适应相应的字段和数据。可以使用Excel的自动填充功能,方便地将公式应用到多行数据中。
    • 将生成的INSERT语句复制到文本文件或数据库工具中,然后执行插入操作。

    工具注意事项

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

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

    代码片段

    Data production按钮

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    GenerateRandomData()类型处理方法

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44



    Insert作成按钮

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    结束语

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

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

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




    希望能帮助到各位 加油!

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


    End
  • 相关阅读:
    老师设计的库CRC计算
    python常用pandas函数nlargest 和 nsmallest及其手动实现
    使用腾讯云轻量应用服务器安装宝塔面板建站使用教程
    Python自动化UI测试之Selenium基础实操
    Spring Boot整合JWT实现用户认证
    Go 结合Gin导出Mysql数据到Excel表格
    项目管理构建工具——Maven(基础篇)
    Debezium系列之:修改源码支持drop foreign key if exists fk
    【无标题】
    硬件电子基础 -单片机信号转换
  • 原文地址:https://blog.csdn.net/qqq1994_0810/article/details/134396836