需求:根據 Word 文檔中的數據字典表格,自動生成標準化 CREATE TABLE、ALTER TABLE ... PRIMARY KEY、COMMENT 等 DDL 語句,提升建模效率。本文展示 VBA 宏處理邏輯與生成效果對比。
文檔包含表級元數據(表名、中文描述)與欄位級明細:
| 欄位 | 含義 | 示例值 |
|---|---|---|
| 字段名 | 英文列名 | userid |
| 中文說明 | 業務含義 | 主鍵ID |
| 數據類型 | 邏輯類型 | Integer / Varchar |
| 長度 | 顯示/儲存長度 | 10 / 50 |
| 缺省 | 默認值 | Chen / 112323 |
| 允許空值 | NULL/NOT NULL | √ / 空 |
| 主鍵 | PK 標識 | √ / 空 |
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
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 '試試看撒';
BACKTICK、ENGINE=InnoDB)、PostgreSQL、Oracle、SQL Server 語法差異適配。小工具解決大痛點:將結構化文檔轉化為可執行代碼,是數據治理自動化的起點。