首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Word VBA 宏自動生成建表 SQL:從數據字典文檔到可執行 DDL 的工程化實踐

     編輯:MySQL 資料庫相關知識

需求:根據 Word 文檔中的數據字典表格,自動生成標準化 CREATE TABLE、ALTER TABLE ... PRIMARY KEY、COMMENT 等 DDL 語句,提升建模效率。本文展示 VBA 宏處理邏輯與生成效果對比。

源數據:Word 表格結構

文檔包含表級元數據(表名、中文描述)與欄位級明細:

欄位含義示例值
字段名英文列名userid
中文說明業務含義主鍵ID
數據類型邏輯類型Integer / Varchar
長度顯示/儲存長度10 / 50
缺省默認值Chen / 112323
允許空值NULL/NOT NULL√ / 空
主鍵PK 標識√ / 空

VBA 核心處理邏輯(偽碼)

Sub GenerateDDL()
    ' 1. 定位表格、讀取表級元數據
    tableName = GetCell("文件名稱")
    tableComment = GetCell("中文描述")
    
    ' 2. 遍歷欄位行,構建列定義數組
    For Each row In FieldRows
        colName = row.Cells("字段名")
        colType = MapLogicalType(row.Cells("數據類型"), row.Cells("長度"))
        colNull = IIf(row.Cells("允許空值")="√", "NULL", "NOT NULL")
        colDefault = BuildDefault(row.Cells("缺省"), colType)
        colComment = row.Cells("中文說明")
        columns.Add(colName & " " & colType & " " & colDefault & " " & colNull)
        comments.Add("COMMENT ON COLUMN " & tableName & "." & colName & " IS '" & colComment & "'")
        If row.Cells("主鍵")="√" Then pkCols.Add(colName)
    Next
    
    ' 3. 組裝 DDL
    ddl = "CREATE TABLE " & tableName & " (" & Join(columns, ", ") & ");"
    If pkCols.Count > 0 Then
        ddl = ddl & vbCrLf & "ALTER TABLE " & tableName & " ADD CONSTRAINT PK_" & tableName & " PRIMARY KEY(" & Join(pkCols, ",") & ");"
    End If
    ddl = ddl & vbCrLf & "COMMENT ON TABLE " & tableName & " IS '" & tableComment & "';"
    ddl = ddl & vbCrLf & Join(comments, vbCrLf)
    
    ' 4. 輸出到新文檔/剪貼簿
    OutputDDL ddl
End Sub

Function MapLogicalType(logical, length)
    Select Case UCase(logical)
        Case "INTEGER": Return "INTEGER"
        Case "VARCHAR": Return "VARCHAR(" & length & ")"
        Case "DATE": Return "DATE"
        ' ... 其他類型映射
    End Select
End Function

生成效果:可直接在 PL/SQL 執行

CREATE TABLE T_Test (
    userid INTEGER NOT NULL,
    username VARCHAR(50) DEFAULT 'Chen' NOT NULL,
    password VARCHAR(30) DEFAULT '我的' NOT NULL,
    telephone VARCHAR(20) DEFAULT '112323' NOT NULL,
    Address VARCHAR(50) DEFAULT 'sss',
    Discription VARCHAR(200) DEFAULT 'sssss',
    jjjjjj VARCHAR(122) DEFAULT '333' NOT NULL,
    hhhh VARCHAR(23) DEFAULT '111' NOT NULL
);
ALTER TABLE T_Test ADD CONSTRAINT PK_T_Test PRIMARY KEY(userid);
COMMENT ON TABLE T_Test IS '用戶信息表';
COMMENT ON COLUMN T_Test.userid IS '主鍵ID';
COMMENT ON COLUMN T_Test.username IS '用戶名';
COMMENT ON COLUMN T_Test.password IS '密碼';
COMMENT ON COLUMN T_Test.telephone IS '用戶電話';
COMMENT ON COLUMN T_Test.Address IS '用戶地址';
COMMENT ON COLUMN T_Test.Discription IS '用戶介紹';
COMMENT ON COLUMN T_Test.jjjjjj IS '試試看';
COMMENT ON COLUMN T_Test.hhhh IS '試試看撒';

工程化擴展方向

  • 多目標方言支援:MySQL (BACKTICK、ENGINE=InnoDB)、PostgreSQL、Oracle、SQL Server 語法差異適配。
  • 雙向同步:DDL 反向解析更新 Word 文檔,實現「文檔即代碼、代碼即文檔」。
  • CI/CD 集成:提交 Word 變更自動觸發 DDL 生成、審核、部署流水線。
  • 類型映射表外部化:JSON/YAML 配置,不修改代碼即可擴展新類型。

小工具解決大痛點:將結構化文檔轉化為可執行代碼,是數據治理自動化的起點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved