日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

根据Word表格自动生成SQL数据库脚本的VBScript代码

發(fā)布時間:2025/4/5 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 根据Word表格自动生成SQL数据库脚本的VBScript代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這是幾年前寫的根據(jù)Word表格自動生成SQL數(shù)據(jù)庫腳本的VBScript代碼,最近修改了下(原來只支持單個Word表格)使其支持一個Word文檔中的多個表格,生成的SQL文件名以Word文件名+.SQL,并和Word文檔存放在同一目錄下(如果需要更改文件名或目錄請修改sSQLFileName 變量),另外表格需要使用規(guī)定的格式(見附件),如果更換表格格式當然也同時修改代碼了。 Sub CreateSQLFile()
'
'
CreateSQLFile Macro
'
宏在 2005-4-15 由 czl 創(chuàng)建
'
????????'數(shù)組聲明
????????'有缺省值有字段數(shù)組
????????Dim DefaultFieldArr(35, 1) As String
????????
'主鍵字段數(shù)組
????????Dim PKFieldArr(10) As String
????????
'缺省數(shù)組長度
????????Dim DefaultArrLen As Integer
????????
'主鍵數(shù)組長度
????????Dim PKArrLen As Integer
????????
'上一行
????????Dim sPreLine As String
????????
'是否有文本圖像字段
????????Dim bHasTextImageField As Boolean
????????
'循環(huán)變量
????????Dim i As Integer
????????
'最大字段描述行
????????Dim iMaxLine As Integer
????????
'文檔表總數(shù)
????????Dim iTableCount As Integer
????????
????????
'腳本文件保存路徑
????????'sSQLFileSavePath = "E:\Hugesoft\表設計\Scripts\"
????????'腳本文件名
????????sSQLFileName = ActiveDocument.FullName + ".SQL"
????????
'創(chuàng)建文件
????????Set fs = CreateObject("Scripting.FileSystemObject")
????????
Set a = fs.CreateTextFile(sSQLFileName, True)
????????
????????iTableCount
= ActiveDocument.Tables.Count
????????
For iIndex = 1 To iTableCount
????????
????????????????
'取得表名
????????????????Set oTable = ActiveDocument.Tables(iIndex)
????????????????
Set aCell = oTable.Rows(4).Cells(2)
????????????????
Set myRange = ActiveDocument.Range(Start:=aCell.Range.Start, _
????????????????????????
End:=aCell.Range.End - 1)
????????????????sTableName
= myRange.Text
????????????????
????????????????
'取表格的總行數(shù)
????????????????iRowCount = oTable.Rows.Count
????????????????
????????????????DefaultArrLen
= 0
????????????????PKArrLen
= 0
????????????????sPreLine
= ""
????????????????bHasTextImageField
= False
????????????????
????????????????
'寫入腳本文件
????????????????a.WriteLine ("if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[" + sTableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)")
????????????????a.WriteLine (
"drop table [dbo].[" + sTableName + "]")
????????????????a.WriteLine (
"GO")
????????????????a.WriteLine (
"")
????????????????a.WriteLine (
"CREATE TABLE [dbo].[" + sTableName + "] (")
????????????????
????????????????
For i = 9 To iRowCount
????????????????????????sLine
= ""
????????????????????????
'取得字段名
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(2).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(2).Range.End - 1)
????????????????????????sFieldName
= myRange.Text
????????????????????????
If sFieldName = "" Then
????????????????????????????????
Exit For
????????????????????????
End If
????????????????????????
'取得數(shù)據(jù)類型
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(4).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(4).Range.End - 1)
????????????????????????sFieldType
= myRange.Text
????????????????????????sFieldType
= StrConv(sFieldType, vbLowerCase)
????????????????????????
????????????????????????
'取得字段長度
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(5).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(5).Range.End - 1)
????????????????????????sFieldLen
= myRange.Text
????????????????????????
'取得小數(shù)位數(shù)
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(6).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(6).Range.End - 1)
????????????????????????sFieldDigLen
= myRange.Text
????????????????????????
'取得缺省值
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(7).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(7).Range.End - 1)
????????????????????????sFieldDefaultValue
= myRange.Text
????????????????????????
'取得允許空值
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(8).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(8).Range.End - 1)
????????????????????????sFieldAllowNull
= myRange.Text
????????????????????????
'取得是否主鍵
????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(9).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(9).Range.End - 1)
????????????????????????sFieldIsPKey
= myRange.Text
????????????????????????
????????????????????????
'是否有文本圖像字段
????????????????????????If sFieldType = "text" Or sFieldType = "ntext" Or sFieldType = "image" Then
????????????????????????????????bHasTextImageField
= True
????????????????????????
End If
????????????????????????
????????????????????????
'是否主鍵字段
????????????????????????If sFieldIsPKey = "" Then
????????????????????????????????PKFieldArr(PKArrLen)
= sFieldName
????????????????????????????????PKArrLen
= PKArrLen + 1
????????????????????????
End If
????????????????????????
????????????????????????
'是否有缺省值
????????????????????????If sFieldDefaultValue <> "" Then
????????????????????????????????
'處理全角字符
????????????????????????????????iLen = Len(sFieldDefaultValue)
????????????????????????????????
If iLen >= 2 Then
????????????????????????????????????????
If Left(sFieldDefaultValue, 1) = "" Then
????????????????????????????????????????????????sFieldDefaultValue
= Chr(39) + Mid(sFieldDefaultValue, 2, iLen - 2) + Chr(39)
????????????????????????????????????????
End If
????????????????????????????????
End If
????????????????????????????????
????????????????????????????????DefaultFieldArr(DefaultArrLen,
0) = sFieldName
????????????????????????????????DefaultFieldArr(DefaultArrLen,
1) = sFieldDefaultValue
????????????????????????????????DefaultArrLen
= DefaultArrLen + 1
????????????????????????
End If
????????????????????????
????????????????????????
'生成行
????????????????????????sLine = Chr(9) + "[" + sFieldName + "] [" + sFieldType + "] "
????????????????????????
????????????????????????
If sFieldType = "varchar" Or sFieldType = "nvarchar" Then
????????????????????????????????sLine
= sLine + "(" + sFieldLen + ") "
????????????????????????
End If
????????????????????????
????????????????????????
If sFieldType = "numeric" Then
????????????????????????????????sLine
= sLine + "(" + sFieldLen + ", " + sFieldDigLen + ") "
????????????????????????
End If
????????????????????????
????????????????????????
If sFieldDigLen = "*" Then
????????????????????????????????
'表示該列自動增長,一般作主鍵用
????????????????????????????????sLine = sLine + "IDENTITY (1, 1) "
????????????????????????
End If
????????????????????????
????????????????????????
If (sFieldType = "varchar") Or (sFieldType = "nvarchar") Or (sFieldType = "text") Or ((sFieldType = "ntext")) Then
????????????????????????????????sLine
= sLine + "COLLATE Chinese_PRC_CI_AS "
????????????????????????
End If
????????????????????????
????????????????????????
If sFieldAllowNull = "" Then
????????????????????????????????sLine
= sLine + "NULL "
????????????????????????
Else
????????????????????????????????sLine
= sLine + "NOT NULL "
????????????????????????
End If
????????????????????????
????????????????????????
If sPreLine <> "" Then
????????????????????????????????a.WriteLine (sPreLine
+ ",")
????????????????????????
End If
????????????????????????
????????????????????????sPreLine
= sLine
????????????????
Next i
????????????????
????????????????iMaxLine
= i
????????????????
????????????????
If sPreLine <> "" Then
????????????????????????a.WriteLine (sPreLine)
????????????????
End If
????????????????
????????????????
If bHasTextImageField Then
????????????????????????a.WriteLine (
") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]")
????????????????
Else
????????????????????????a.WriteLine (
") ON [PRIMARY]")
????????????????
End If
????????????????a.WriteLine (
"GO")
????????????????a.WriteLine (
"")
????????????????
????????????????
'生成主鍵描述
????????????????a.WriteLine ("ALTER TABLE [dbo].[" + sTableName + "] WITH NOCHECK ADD")
????????????????a.WriteLine (
Chr(9) + "CONSTRAINT [PK_" + sTableName + "] PRIMARY KEY CLUSTERED")
????????????????a.WriteLine (
Chr(9) + "(")
????????????????
????????????????sPreLine
= ""
????????????????
For i = 0 To PKArrLen - 1
????????????????????????sLine
= Chr(9) + Chr(9) + "[" + PKFieldArr(i) + "]"
????????????????????????
If sPreLine <> "" Then
????????????????????????????????a.WriteLine (sPreLine
+ ",")
????????????????????????
End If
????????????????????????sPreLine
= sLine
????????????????
Next i
????????????????
If sPreLine <> "" Then
????????????????????????a.WriteLine (sPreLine)
????????????????
End If
????????????????a.WriteLine (
Chr(9) + ") ON [PRIMARY]")
????????????????a.WriteLine (
"GO")
????????????????a.WriteLine (
"")
????????????????
????????????????
'生成缺省值描述
????????????????If DefaultArrLen > 0 Then
????????????????????????a.WriteLine (
"ALTER TABLE [dbo].[" + sTableName + "] WITH NOCHECK ADD")
????????????????????????sPreLine
= ""
????????????????????????
For i = 0 To DefaultArrLen - 1
????????????????????????????????sLine
= Chr(9) + "CONSTRAINT [DF_" + sTableName + "_" + DefaultFieldArr(i, 0) + "] DEFAULT (" + DefaultFieldArr(i, 1) + ") FOR [" + DefaultFieldArr(i, 0) + "]"
????????????????????????????????
If sPreLine <> "" Then
????????????????????????????????????????a.WriteLine (sPreLine
+ ",")
????????????????????????????????
End If
????????????????????????????????sPreLine
= sLine
????????????????????????
Next i
????????????????????????
If sPreLine <> "" Then
????????????????????????????????a.WriteLine (sPreLine)
????????????????????????
End If
????????????????????????a.WriteLine (
"GO")
????????????????????????a.WriteLine (
"")
????????????????
End If
????????????????
????????????????
'生成索引描述
????????????????'查找索引描述開始行
????????????????iIndexStartLine = 0
????????????????
????????????????
For i = iMaxLine To iRowCount
????????????????????????
Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(1).Range.Start, _
????????????????????????????????
End:=oTable.Rows(i).Cells(1).Range.End - 1)
????????????????????????sTmp
= myRange.Text
????????????????????????
If sTmp = "索引組成:" Then
????????????????????????????????iIndexStartLine
= i
????????????????????????????????
Exit For
????????????????????????
End If
????????????????
Next i
????????????????
????????????????
'生成索引描述
????????????????If iIndexStartLine > 0 Then
????????????????????????
For i = iIndexStartLine + 2 To iRowCount
????????????????????????????????
'取得索引名稱
????????????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(2).Range.Start, _
????????????????????????????????????????
End:=oTable.Rows(i).Cells(2).Range.End - 1)
????????????????????????????????sIndexName
= myRange.Text
????????????????????????????????
If sIndexName = "" Then
????????????????????????????????????????
Exit For
????????????????????????????????
End If
????????????????????????????????
'取得索引列序列
????????????????????????????????Set myRange = ActiveDocument.Range(Start:=oTable.Rows(i).Cells(3).Range.Start, _
????????????????????????????????????????
End:=oTable.Rows(i).Cells(3).Range.End - 1)
????????????????????????????????sIndexFieldList
= myRange.Text
????????????????????????????????
'寫入文件
????????????????????????????????a.WriteLine (" CREATE UNIQUE INDEX [" + sIndexName + "] ON [dbo].[" + sTableName + "](" + sIndexFieldList + ") ON [PRIMARY]")
????????????????????????????????a.WriteLine (
"GO")
????????????????????????
Next i
????????????????
End If
????????
Next iIndex
????????
????????a.Close
????????
????????
MsgBox "成功生成腳本文件:" + Chr(13) + Chr(9) + sSQLFileName + ""
End Sub

?????? 使用方法:點Word菜單“工具→宏→宏”,單擊彈出對話框中右側的“創(chuàng)建”,進入編輯器后把下面的代碼復制粘貼覆蓋缺省生成的代碼,完成后可以通過Word工具欄的自定義功能把宏放在工具欄,方便使用。

?????? 文中所用World表格參考格式請到下面的地址下載。??????

?????? 本文歡迎轉載,轉載地址:http://www.hugesoft.net/ContentPage.aspx?p1=010001&p2=85

轉載于:https://www.cnblogs.com/zhilunchen/archive/2008/09/19/1294505.html

總結

以上是生活随笔為你收集整理的根据Word表格自动生成SQL数据库脚本的VBScript代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一级特黄 | 性久久久久久久久久 | 国产国语对白 | 久久免费在线观看视频 | 寂寞d奶大胸少妇 | 骚虎tv | 日韩中文在线一区 | 久伊人网 | 久久免费久久 | 色姑娘综合 | 国产日韩欧美91 | 亚洲91色| 色一区二区三区 | 午夜影院性 | 蜜桃精品久久久久久久免费影院 | 麻豆蜜桃视频 | 中国女人内谢69xxxxⅹ视频 | 电影《走路上学》免费 | 波多野结衣在线播放视频 | 午夜性激情 | 国产中文一区二区三区 | 97伊人超碰 | 手机看片99 | 怡红院av在线 | 欧美精品一区二区性色a+v | 黄色av不卡| 777免费视频| 少妇三级 | 免费成人在线视频观看 | 欧美亚洲激情视频 | 亚洲免费视频一区二区 | 欧美日韩视频 | 国产又粗又长又黄视频 | 少妇精品一区二区 | 亚洲自拍第二页 | 超碰婷婷 | 一眉道姑 | 99热欧美| cao久久| 成人小视频在线观看 | 一区二区成人免费视频 | 日韩成人福利视频 | 日产电影一区二区三区 | 五月婷婷免费视频 | 欧美人妻少妇一区二区三区 | а中文在线天堂 | 99视频国产精品 | 亚洲欧美日韩一区二区三区四区 | 日韩影院在线 | 先锋av资源 | 中文字幕婷婷 | 成人国产一区二区三区精品麻豆 | 日本视频网址 | 日本二区在线观看 | 91最新地址| 秋霞欧美在线观看 | 亚洲成人网在线播放 | 亚洲天堂av片 | 亚洲国产精品成人无久久精品 | 国产精品永久 | 日本 片 成人 在线 九色麻豆 | 污污内射在线观看一区二区少妇 | 日韩精品国产精品 | 91n在线观看| 12av在线| 日韩欧美手机在线 | 91亚洲精品久久久蜜桃网站 | 四虎永久免费 | 亚洲精品国产99 | 国产极品视频 | 99re99热 | 国产欧美视频在线观看 | 免费毛片网站在线观看 | 9999热视频| 亚洲欧美日韩国产精品 | 色撸撸在线观看 | 婷婷资源网 | 天天干妹子 | 草草视频在线 | www.色播.com| 看a网站 | 日韩精品v| 午夜操操| 被绑在床强摁做开腿呻吟 | 欧美成人aaaaⅴ片在线看 | 日本免费在线一区 | 色亚洲色图| 一区三区在线观看 | 色吧婷婷 | 成人午夜影视在线观看 | 涩涩网站入口 | 日韩视频一 | 风韵丰满熟妇啪啪区老熟熟女 | 久久国产精品免费观看 | 欧美色影院| 国产欧美大片 | 亚洲综合小说 | 亚洲一区二区色图 | 轻轻草在线视频 |