匯出 Access 詳細目錄 (AccessToSQL)
如果您有多個 Access 資料庫,而且不確定要移轉至哪一個資料庫 SQL Server,則可以匯出專案中所有 Access 資料庫的詳細目錄。 然後,您可以檢閱和查詢詳細目錄中繼資料,以判斷要移轉的資料庫中的資料庫和物件。 此詳細目錄可讓您快速找到問題的解答,例如以下清單:
- 最大的資料庫是哪個?
- 誰擁有大部分的資料庫?
- 哪些資料庫包含相同的資料表?
- 過去六個月內未修改哪些資料庫?
- 哪些資料庫包含私人資訊?
本文結尾會提供用來回答這些問題的查詢範例。
匯出的中繼資料
SSMA 會匯出 Access 資料庫、資料表、資料行、索引、外部索引鍵、查詢、報告、表單、巨集和模組的相關中繼資料。 這些項目類別的中繼資料會分別匯出至個別資料表。 如需這些資料表的結構描述,請參閱 Access 詳細目錄結構描述。
匯出詳細目錄資料
若要匯出 Access 詳細目錄,您必須先開啟或建立 SSMA 專案,然後新增您要分析的 Access 資料庫。 將資料庫新增至 SSMA 專案之後,您即可將這些資料庫的中繼資料匯出至指定的 SQL Server 資料庫和結構描述。 如有必要,SSMA 會建立資料表來儲存中繼資料。 SSMA 接著會將 Access 資料庫的中繼資料新增至 SQL Server 資料庫。
注意
Access 資料庫可以分割成多個檔案:後端資料庫,其中包含包含查詢、表單、報告、巨集、模組和捷徑的資料表和前端資料庫。 如果您想要將分割資料庫移轉至 SQL Server,請將前端資料庫新增至 SSMA。
下列指示說明如何建立專案、將資料庫新增至專案、連線至 SQL Server,然後匯出詳細目錄資料。
建立專案
開啟適用於 Access 的 SSMA。
在 [檔案] 功能表上,選取 [新增專案]。
[新增專案] 對話方塊隨即出現。
在 [名稱] 方塊中,輸入專案的名稱。
在 [位置] 方塊中,輸入或選取專案的資料夾。
在 [移轉至] 下拉式方塊中,選取您要移轉的目標版本,然後選取 [確定]。
如需建立專案的詳細資訊,請參閱建立及管理專案。
尋找和新增資料庫
在 [檔案] 功能表上,選取 [尋找資料庫]。
在 [尋找資料庫精靈] 中,輸入您要搜尋的磁碟機、檔案路徑或 UNC 路徑。 或者,選取 [瀏覽] 選取磁碟機或網路資料夾。
選取 [新增] 將位置新增至清單方塊。
重複上述兩個步驟新增其他搜尋位置。
也可以新增搜尋準則,讓傳回的資料庫清單更加精確。
重要
[完整或部分檔案名稱] 文字方塊不支援萬用字元。
選取 [掃描]。
[掃描] 頁面隨即出現。 這會顯示找到的資料庫和搜尋進度。 要停止搜尋,請選取 [停止]。
在 [選取檔案] 頁面上,選取您要新增至專案的每個資料庫。
您可以使用清單頂端的 [全部選取] 和 [全部清除] 按鈕,來選取或清除所有資料庫。 您也可以按住 CTRL 鍵選取多個資料列,也可以按住 SHIFT 鍵選取一個範圍的資料列。
選取 [下一步]。
在 [驗證] 頁面上,選取 [完成]。
如需將資料庫新增至專案的詳細資訊,請參閱新增及移除 Access 資料庫檔案。
連接至 SQL Server
在 [檔案] 功能表中選取 [連線至 SQL Server]。
在 [連線] 對話方塊中,輸入或選取 SQL Server 執行個體的名稱。
如果您要連線到本機電腦上的預設執行個體,可以輸入 localhost 或點 (.)。
如果您要連線到另一部電腦上的預設執行個體,請輸入該電腦的名稱。
如果您要連線至具名執行個體,請輸入電腦名稱,加上反斜線及執行個體名稱。 例如:MyServer\MyInstance。
在 [資料庫] 方塊中,對於匯出的中繼資料輸入目標資料庫的名稱。
如果您 SQL Server 的執行個體設定為接受非預設連接埠上的連線,請在 [伺服器連接埠] 方塊中輸入用來進行 SQL Server 連線的連接埠號碼。 針對 SQL Server 預設執行個體,預設連接埠號碼為 1433。 針對具名執行個體,SSMA 會嘗試從 SQL Server Browser 服務取得連接埠號碼。
在 [驗證] 下拉式清單中,選取要用於連線的驗證類型。 若要使用目前的 Windows 帳戶,請選取 [Windows 驗證]。 若要使用 SQL Server 登入,請選取 [SQL Server 驗證],然後提供使用者名稱和密碼。
如需連線到 SQL Server 的詳細資訊,請參閱連線到 SQL Server (AccessToSQL)。
匯出詳細目錄資訊
在 [存取中繼資料總管] 中,展開 [Access-metabase]。
勾選 [資料庫] 旁邊的核取方塊
若要省略個別的資料庫或資料庫物件,請展開 [資料庫] 資料夾,然後取消勾選資料庫或資料庫物件旁邊的核取方塊。
以滑鼠右鍵按一下 [資料庫],然後選取 [匯出結構描述]。
在 [選取要匯出的結構描述] 對話框中,選取匯出中繼資料的目標結構描述,然後選取 [確定]。
每次匯出中繼資料時,SSMA 都會將資料附加至詳細目錄。 詳細目錄中的現有資料不會更新或刪除。
查詢匯出的中繼資料
匯出 Access 資料庫的中繼資料之後,您可以查詢中繼資料。 下列指示說明如何使用 SQL Server Management Studio 中的 [查詢編輯器] 視窗來執行查詢。
查詢中繼資料
從 [開始] 功能表,指向 [所有程式],並指向 [Microsoft SQL Server 2005]、[Microsoft SQL Server 2008] 或 [Microsoft SQL Server 2012],然後選取 [SQL Server Management Studio]。
在 [連接到伺服器] 對話框中,驗證設定,然後選取 [連接]。
在 Management Studio 工具列上,選取 [新增查詢] 開啟查詢編輯器。
在 [查詢編輯器] 視窗中,輸入查詢。 下節顯示數個範例:
按 F5 鍵將執行查詢。
查詢範例
在執行下列任何查詢之前,您應該先執行 USE database_name 查詢,確定已針對匯出的中繼資料包含在其中的資料庫執行查詢。 例如,如果您將中繼資料匯出至名稱為 MyAccessMetadata 的資料庫,您會在 Transact-SQL 程式碼的開頭新增下列陳述式:
USE MyAccessMetadata;
GO
下列範例全都使用 dbo 結構描述。 如果您將中繼資料匯出至另一個結構描述,請務必在執行這些查詢時變更結構描述。
這些資料庫中有哪些資料表和資料行?
下列查詢會聯結包含資料行、資料表和資料庫中繼資料的資料表,然後傳回依資料行名稱排序的所有資料庫、資料表和資料行名稱:
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
ORDER BY ColumnName;
最大的資料庫是哪個?
下列查詢會傳回每個 Access 資料庫中的資料庫名稱、檔案大小和資料表數目,依檔案大小排序:
SELECT DatabaseName,
FileSize,
TablesCount
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileSize DESC;
誰是大部分資料庫的擁有者?
下列查詢會傳回每個 Access 資料庫的資料庫名稱和擁有者,依擁有者排序。
SELECT DatabaseName, FileOwner
FROM dbo.SSMA_Access_InventoryDatabases
ORDER BY FileOwner;
哪些資料庫包含相同的資料表?
下列查詢會使用子查詢來尋找資料表清單中出現多次的所有資料表名稱,然後使用這個資料表清單來取得資料庫名稱。 結果會傳回資料庫名稱,然後傳回資料表名稱,並依資料表名稱排序。
SELECT DatabaseName,
TableName
FROM dbo.SSMA_Access_InventoryTables T
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON D.DatabaseId = T.DatabaseId
WHERE TableName IN (
SELECT TableName
FROM dbo.SSMA_Access_InventoryTables
GROUP BY TableName
HAVING COUNT(*) > 1
)
ORDER BY TableName;
過去六個月內未修改哪些資料庫?
下列查詢會取得目前的日期、取得六個月前的月份值,然後傳回修改日期大於六個月的資料庫清單。
SELECT DatabaseName,
DateModified
FROM dbo.SSMA_Access_InventoryDatabases
WHERE DATEDIFF(MONTH, DateModified, GETDATE()) > 6
ORDER BY DateModified;
哪些資料庫包含私人資訊?
您的 Access 資料庫可能包含敏感性或個人資訊。 您可能想要將這些資料庫移至 SQL Server,以利用其安全性功能。 如果您知道包含敏感性資料的資料行具有特定名稱或包含特定字元,您可以使用查詢來尋找包含這些資訊的所有資料行。 例如,您可以找到包含字串「salary」的所有資料行。 查詢接著會傳回資料庫名稱、資料表名稱和資料行名稱。
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns C
INNER JOIN dbo.SSMA_Access_InventoryTables T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases D
ON T.DatabaseId = D.DatabaseId
WHERE ColumnName LIKE '%salary%';
如果您不知道資料行名稱,您可以撰寫查詢以傳回所有資料行。 若要這麼做,請從上一個查詢中移除 WHERE 子句。