一、建表语句

  不带分区版本:V1.0:

Sub createTableDDL()
'自动创建建表语句
'定义换行和TAB
Ln = Chr() + Chr()
TB = Chr()
'定义脚本目录
Dim dir AS String
dir = "C:\CREATE_TABLE_DDL"
Set FSOE = CreateObject("Scripting.FileSystemObject")
If FSOE.folderexists(dir) = False Then
MkDir dir
End If '调用脚本定义
Set SqlFileDDL = FSOE.CreateTextFile("C:\CREATE_TABLE_DDL\create_table_ddl.sql", True)
'获得表名
tableName = Trim(Cells(, ).Value)
'获得表注释
tableComment = Trim(Cells(, ).Value)
'获得创建者
createBy = Trim(Cells(, ).Value)
Dim dt As Date
dt = Format(Date, "yyyy-mm-dd")
'获得当前日期
createDate = dt
'获得A列已使用的行数
count_row_k = [A65536].End(xlUp).Row
'定义SQL
SQL = "--创建者:" & createBy & Ln
SQL = SQL & "--创建时间:" & createDate & Ln
SQL = SQL & "DROP TABLE IF EXISTS " & tableName & " ;" & Ln
SQL = SQL & "CREATE TABLE " & tableName & "("
'写入文件
SqlFileDDL.WriteLine (SQL)
For i = To count_row_k
If i = count_row_k Then
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "'" & Ln & ")"
SqlFileDDL.WriteLine(col_name)
Exit For
End If
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "',"
SqlFileDDL.WriteLine(col_name)
Next
SqlFileDDL.WriteLine("COMMENT '" & tableComment & "'")
MsgBox("生成成功!生成路径为:" & dir)
End Sub

   带分区与生命周期版本V2.0:

Sub create_ddl()
'自动创建建表语句
'定义换行和TAB
Ln = Chr() + Chr()
TB = Chr()
'定义脚本目录
Dim dir As String
dir = "C:\CREATE_TABLE_DDL"
Set FSOE = CreateObject("Scripting.FileSystemObject")
If FSOE.folderexists(dir) = False Then
MkDir dir
End If '调用脚本定义
Set SqlFileDDL = FSOE.CreateTextFile("C:\CREATE_TABLE_DDL\create_table_ddl.sql", True)
'获得表名
TableName = Trim(Cells(, ).Value)
'获得表注释
tableComment = Trim(Cells(, ).Value)
'获得生命周期
lifecycle = Trim(Cells(, ).Value)
'获得创建者
createBy = Trim(Cells(, ).Value)
Dim dt As Date
dt = Format(Date, "yyyy-mm-dd")
'获得当前日期
createDate = dt
'获得A列已使用的行数
count_row_k = [A65536].End(xlUp).Row
'获得E列已使用的行数
part_row_k = [E65536].End(xlUp).Row
'定义SQL
Sql = "--创建者:" & createBy & Ln
Sql = Sql & "--创建时间:" & createDate & Ln
Sql = Sql & "DROP TABLE IF EXISTS " & TableName & " ;" & Ln
Sql = Sql & "CREATE TABLE " & TableName & "("
'写入文件
SqlFileDDL.WriteLine (Sql)
For i = To count_row_k
If i = count_row_k Then
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "'" & Ln & ")"
SqlFileDDL.WriteLine (col_name)
Exit For
End If
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "',"
SqlFileDDL.WriteLine (col_name)
Next
SqlFileDDL.WriteLine ("COMMENT '" & tableComment & "'")
'加上分区列
If part_row_k > Then
part_col_name = "PARTITIONED BY ("
SqlFileDDL.WriteLine (part_col_name)
For j = To part_row_k
If j = part_row_k Then
part_col_name = TB & LCase(Cells(j, )) & " " & UCase(Cells(j, )) & " COMMENT '" & Trim(Cells(j, )) & "'"
SqlFileDDL.WriteLine (part_col_name)
Exit For
End If
part_col_name = TB & LCase(Cells(j, )) & " " & UCase(Cells(j, )) & " COMMENT '" & Trim(Cells(j, )) & "'" & ","
SqlFileDDL.WriteLine (part_col_name)
Next
End If
'加上生命周期
SqlFileDDL.WriteLine ("LIFECYCLE " & lifecycle & ";")
MsgBox ("生成成功!生成路径为:" & dir)
End Sub

  模板:

  更新版本2.1:

Sub createTableDDL()
'定义换行和TAB
Ln = Chr() + Chr()
TB = Chr()
'定义脚本目录
Dim dir AS String
dir = "C:\CREATE_TABLE_DDL"
Set FSOE = CreateObject("Scripting.FileSystemObject")
If FSOE.folderexists(dir) = False Then MkDir dir
'调用脚本定义
Set SqlFileDDL = FSOE.CreateTextFile("C:\CREATE_TABLE_DDL\create_table_ddl.sql", True)
'获得表名
tableName = Trim(Cells(, ).Value)
'获得表注释
tableComment = Trim(Cells(, ).Value)
'获得生命周期
lifecycle = Trim(Cells(, ).Value)
'获得创建者
createBy = Trim(Cells(, ).Value)
Dim dt As Date
dt = Format(Date, "yyyy-mm-dd")
'获得当前日期
createDate = dt
'获得A列已使用的行数
count_row_k = [A65536].End(xlUp).Row
'获得E列已使用的行数
part_row_k = [E65536].End(xlUp).Row
'定义SQL
SQL = "--创建者:" & createBy & Ln & _
"--创建时间:" & createDate & Ln & _
"DROP TABLE IF EXISTS " & tableName & " ;" & Ln & _
"CREATE TABLE " & tableName & "("
'写入文件
SqlFileDDL.WriteLine (SQL)
For i = To count_row_k -
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "',"
SqlFileDDL.WriteLine(col_name)
Next
'最后一列
i = count_row_k
col_name = TB & LCase(Cells(i, )) & " " & UCase(Cells(i, )) & " COMMENT '" & Trim(Cells(i, )) & "'" & Ln & ")"
SqlFileDDL.WriteLine(col_name)
SqlFileDDL.WriteLine("COMMENT '" & tableComment & "'")
'加上分区列
If part_row_k > Then
part_col_name = "PARTITIONED BY ("
SqlFileDDL.WriteLine(part_col_name)
For j = To part_row_k -
part_col_name = TB & LCase(Cells(j, )) & " " & UCase(Cells(j, )) & " COMMENT '" & Trim(Cells(j,)) & "'" & ","
SqlFileDDL.WriteLine(part_col_name)
Next
j = part_row_k
part_col_name = TB & LCase(Cells(j, )) & " " & UCase(Cells(j, )) & " COMMENT '" & Trim(Cells(j,)) & "'"
SqlFileDDL.WriteLine(part_col_name)
End If
'加上生命周期
SqlFileDDL.WriteLine("LIFECYCLE " & lifecycle & ";")
MsgBox("生成成功!生成路径为:" & dir)
End Sub

//模板在微云文件中。

二、反向解析

  通过DDL,反向解析出字段填充到excel中

  反向解析1.0:

REM "获取数组长度"
Public Function ArrayLength(ByVal ary) As Integer
ArrayLength = UBound(ary) - LBound(ary) +
End Function Sub resverse_parse()
'获得表名
tableDDL = Trim(Cells(, ).Value)
'截取语句字段部分(以括号分隔)
index_quote_left_1 = InStr(,tableDDL,"(")
index_quote_right_1 = InStr(,tableDDL,")")
index_quote_left_2 = InStr(index_quote_right_1 + ,tableDDL,"(")
index_quote_right_2 = InStr(index_quote_right_1 + ,tableDDL,")")
table_comment_content = Mid(tableDDL,index_quote_right_1 + ,index_quote_left_2)
table_comment_arr = Split(table_comment_content, "'")
table_comment = table_comment_arr()
Cells(, ).Value = table_comment
table_name = Mid(tableDDL,,index_quote_left_1 - )
Cells(, ).Value = table_name
table_content = Mid(tableDDL,index_quote_left_1,index_quote_right_1 - index_quote_left_1 - )
content_arr = Split(table_content,",")
content_len = ArrayLength(content_arr) For i = to content_len - step
col_arr = Split(content_arr(i)," ")
j = i +
col_name = col_arr()
col_comment = Replace(col_arr(),"'","")
MsgBox col_comment
Cells(j, ).Value = col_name
Cells(j, ).Value = col_comment
Next i
End Sub

  清除重置1.1(1.0为直接清除指定区域版,已废弃):

Sub clear()
'采用先清除后填充的策略
Range("A1:D256").ClearContents
'填充
Cells(, ).Value = "建表DDL"
Cells(, ).Value = "表名"
Cells(, ).Value = "表注释"
Cells(, ).Value = "列名"
Cells(, ).Value = "列注释"
End Sub

  模板文件在百度云中,图示如下:

  

excel的宏与VBA实践——建表语句的更多相关文章

  1. 基于表的数据字典构造MySQL建表语句

    表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...

  2. hive查看建表语句

    查看hive建表语句:show create table tablename; 查看hive表结构:describe  tablename; 简写:desc tablename;

  3. 批量导出hive表的建表语句

    转的这里的 首先先导出所有的table表 hive -e "use xxxdb;show tables;" > tables.txt 然后再使用hive内置语法导出hive表 ...

  4. 根据javabean转换为mysql建表语句与mapper内容

    原文地址:  https://www.cnblogs.com/Jeffscnblog/p/10072483.html 一般上,我们会使用数据库表转换为javabean.dao.或是mapper,就叫逆 ...

  5. MySQL 建表语句 create table 中的列定义

    MySQL 建表语句 create table 中的列定义: column_definition: data_type [NOT NULL | NULL] [DEFAULT default_value ...

  6. sqlserver 表中记录生成insert,可以加条件,可以生成建表语句

    sqlserver 表中记录生成insert,可以加条件,可以生成建表语句 create PROCEDURE [sp_getinsert] ( ) , --如果非默认架构,可以加上架构名 例如:sch ...

  7. 三种常用的MySQL建表语句

    MySQL建表语句是最基础的SQL语句之一,下面就为您介绍最常用的三种MySQL建表语句,如果您对MySQL建表语句方面感兴趣的话,不妨一看. 1.最简单的: CREATE TABLE t1(    ...

  8. mysql 常用命令,连接数据库,查看建表语句,批量导入数据,批量更新数据,连接查询

    1. 1)MySQL 连接本地数据库,从cmd中进入mysql命令编辑器: root root分别为用户名和密码 mysql -uroot -proot 2)MySQL 连接本地数据库,用户名为“ro ...

  9. oracle的建表语句

    oracle数据库的建表语句,具体语法如下: CREATE TABLE tablename (column_name datatype [null,not null], column_name dat ...

随机推荐

  1. Nginx 优化配置及详细注释

    Nginx 的nginx.conf文件,是调优后的,具体影响已经写清楚注释,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置 #运行用户 ...

  2. Android ConstraintLayout详解(from jianshu)

    Android ConstraintLayout详解 https://www.jianshu.com/p/a8b49ff64cd3 1. 概述     在本篇文章中,你会学习到有关Constraint ...

  3. PHP将Base64图片转换为本地图片并保存

    本文出至:新太潮流网络博客 /** * [将Base64图片转换为本地图片并保存] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB h ...

  4. php编译安装 报错 make ***[libphp5.la] Error 1解决方法

    报错信息: /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Err ...

  5. 分享几款常用的MySQL管理工具

    MySQL数据库以体积小.速度快.总体拥有成本低等优点,深受广大中小企业的喜爱,像我们常见的MySQL管理工具都有那些呢?下面给大家推荐六个常用的MySQL管理工具!      phpMyAdmin  ...

  6. Azure 中的虚拟网络和虚拟机

    创建 Azure 虚拟机 (VM) 时,必须创建虚拟网络 (VNet) 或使用现有的 VNet. 此外,还需要确定如何在 VNet 上访问 VM. 在创建资源之前必须做好规划,确保了解网络资源的限制. ...

  7. TCP是如何实现三次握手的?

    什么是三次握手 TCP是网络传输层的协议,提供面向连接的可靠的字节流服务,要通信得先建立连接 所谓三次握手就是指,建立一个TCP连接时,需要CLient与Server发送三个包,确认连接的建立 这一过 ...

  8. env :让系统决定你命令的位置

    如果我们使用lua 运行脚本程序,或者使用python执行程序.我们不用明确 python的位置,可以使用env 命令来运行: env 程序介绍: NAME env - run a program i ...

  9. Django之FBV&CBV

    CBV与FBV是django视图中处理请求的两种方式 FBV FBV也就是function base views,字面意思函数基础视图,使用函数的方式处理请求url分发中添加的参数为视图处理函数名, ...

  10. 64位Windows的Dos中取消了edit命令

    前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...