2014-01-22 24 views
0

我想創建有關數據庫中表的自動文檔。輸出應該是一個excel表格。創建數組,由字符串觸發並由字符串停止

前兩列應該由列名組成,以及它們是否可以包含空值。我想從用於創建表的SQL腳本中提取數據,因爲我不一定有權訪問所有數據庫。

的查詢格式如下:

CREATE TABLE tablename 
(
column_name1 DATATYPE(len) DEFAULT "" NOT NUll 
column_name2 DATATYPE(len) DEFAULT "" NOT NUll 
column_name2 DATATYPE(len) DEFAULT "" NOT NUll 
) 

我要存儲在陣列中的所有的欄。所以我想要的腳本是:

通過sql腳本。
如果他找到正在查找的Create table + Table,請在下一個「(」直到找到「)」之後開始向該數組中添加行。數組中的值應在第一個空格後切斷。
如果字符串中包含「not null」,則還要在數組的第二列中添加一個「x」。

我是一個總的腳本新手。我知道如何剪切字符串,並創建必要的循環。但我不知道,我如何選擇正確的字符串。我搜索了網頁,但沒有找到正確的答案。

我有PowerShell和VBScript的在我手上

你們能幫助我嗎?

謝謝你的時間。

+3

您是否可以包含初始值和預期結果? – mjolinor

回答

0

VBScript在這裏,但我會建議Powershell,如果可用。
使用像例子這樣的正則表達式來提取表名和數據。從那裏,您可以使用數據部分分割行(使用vbNewLine上的分割功能)並從每行中提取數據。處理數據將其添加到數組。

testlines = join(array(_ 
"nonsense", _ 
"CREATE TABLE tablename", _ 
"(", _ 
"column_name1 DATATYPE(len) DEFAULT """" NOT NUll", _ 
"column_name2 DATATYPE(len) DEFAULT """" NOT NUll", _ 
"column_name2 DATATYPE(len) DEFAULT """" NOT NUll", _ 
")", _ 
"more nonsense"), vbNewLine) 

Set re = new RegExp 
re.Global = true 
re.Pattern = "CREATE TABLE (.*)[^\(]*\(([\s\S]*)\)" 
Set matches = re.Execute(testlines) 
Wscript.echo matches(0).submatches(0) ' returns 'tablename' 
Wscript.echo matches(0).submatches(1) 
    ' returns column_name1 ... to ... NOT NUll on the last line 

我願意幫助您完成最後一部分,但您需要首先展示一些工作。布丁的證明是在吃東西。