開發管理工具時常需列出資料庫內的所有表格、檢視等物件。本文提供兩種通用做法:ADO Schema 查詢與原生 SQL 查詢,並支援 Access、SQL Server、Oracle 等主流資料庫。
使用 ADODB.Connection.OpenSchema(adSchemaTables) 可取得標準化的資料表結構描述資訊,包含目錄名、表名、擁有者、類型(TABLE/VIEW/SYSTEM TABLE)與描述。以下為經典 ASP 範例:
<%
Dim Conn, RS, connstr
Set Conn = Server.CreateObject("ADODB.Connection")
connstr = "DSN=Sql;UID=sa;PWD=;DATABASE=master"
Conn.CursorLocation = adUseClient
Conn.Open connstr
Set RS = Conn.OpenSchema(adSchemaTables)
%>
<table border="1">
<tr><th>資料庫</th><th>表格名稱</th><th>擁有者</th><th>類型</th><th>描述</th></tr>
<% Do Until RS.EOF %>
<tr>
<td><%= RS("TABLE_CATALOG") %></td>
<td><%= RS("TABLE_NAME") %></td>
<td><%= RS("TABLE_SCHEMA") %></td>
<td><%= RS("TABLE_TYPE") %></td>
<td><%= RS("DESCRIPTION") %></td>
</tr>
<% RS.MoveNext : Loop %>
</table>
此法在 Access、SQL Server、IIS/PWS 均可執行,且回傳欄位標準一致。
| 資料庫 | 查詢語句 | 備註 |
|---|---|---|
| Access | SELECT * FROM MSysObjects | 需開啟「顯示系統物件」 |
| SQL Server | SELECT * FROM dbo.sysobjects | 建議加 WHERE xtype IN ('U','V') 過濾使用者表/檢視 |
| Oracle | SELECT * FROM tab | 或查 user_tables/all_tables |
提醒:不加篩選條件會包含系統物件、儲存程序等雜訊,實務上請依 TYPE/xtype 欄位過濾。
OpenSchema(adSchemaColumns):欄位定義、資料型別、長度、是否可為 NullOpenSchema(adSchemaIndexes):索引資訊OpenSchema(adSchemaForeignKeys):外鍵關聯OpenSchema(adSchemaProcedures):預存程序清單善用 ADO Schema 集合可建構完整的資料庫文件產生器或程式碼產生工具。