如果你有多個 Access 資料庫,且不確定要遷移哪些到 SQL Server,可以匯出專案中所有 Access 資料庫的清單。 你可以檢視並查詢庫存的元資料,以判斷哪些資料庫和該資料庫中的物件需要遷移。 這個清單幫助你快速找到以下問題的答案:
- 最大的資料庫為何?
- 誰擁有大部分的資料庫?
- 哪些資料庫包含相同的數據表?
- 過去六個月未修改哪些資料庫?
- 哪些資料庫包含私人資訊?
回答這些問題的查詢範例載於本文末尾。
匯出的元數據
SQL Server 移轉小幫手 (SSMA) 會匯出 Access 資料庫、資料表、資料行、索引、外部索引鍵、查詢、報表、表單、宏和模組的中繼資料。 SSMA 會將這些類別的中繼資料匯出到獨立的表格。 關於這些資料表的結構,請參見 存取庫存結構。
出口庫存資料
要匯出存取清單,請先開啟或建立一個 SSMA 專案。 然後加入你想分析的 Access 資料庫。 將資料庫新增至 SSMA 項目之後,您會將這些資料庫的元數據匯出至指定的 SQL Server 資料庫和架構。 如有必要,SSMA 會建立數據表來儲存元數據。 SSMA 接著會將 Access 資料庫的相關元數據新增至 SQL Server 資料庫。
注意
Access 資料庫可以分割成多個檔案:後端資料庫,其中包含包含查詢、表單、報表、巨集、模組和快捷方式的數據表和前端資料庫。 如果您想要將分割資料庫移轉至 SQL Server,請將前端資料庫新增至 SSMA。
下列指示說明如何建立專案、將資料庫新增至專案、連線到 SQL Server,然後匯出清查數據。
建立專案
開啟 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 的資訊,請參見 Connect to SQL Server。
匯出清查資訊
在 [存取元數據總管] 中,展開 Access-metabase。
選取 資料庫旁的複選框。
若要省略個別資料庫或資料庫物件,請展開 [Databases] 資料夾,然後清除資料庫或資料庫物件旁的複選框。
以滑鼠右鍵按兩下 [資料庫],然後選取 [匯出架構。
在 [選取匯出 架構] 對話框中,選取匯出元數據的目標架構,然後選取 [確定] 。
每次匯出元數據時,SSMA 都會將數據附加至庫存。 清查中的現有數據不會更新或刪除。
查詢導出的元數據
匯出有關 Access 資料庫的元數據之後,您可以查詢元數據。 以下說明說明如何使用 SQL Server Management Studio 中的查詢編輯器視窗來執行查詢。
查詢元數據
從開始選單進入 SQL Server Management Studio。
在 [連線到伺服器] 對話框中,確認設定,然後選取 [Connect]。
在 Management Studio 工具列上,選取 [[新增查詢] 以開啟 [查詢編輯器]。
在 [查詢編輯器] 視窗中,輸入查詢。 下一節顯示一些範例。
按 F5 鍵執行查詢。
查詢範例
在執行以下任何查詢前,先先執行 USE database_name 查詢,確保查詢是否與包含匯出後元資料的資料庫對應。 例如,如果你將中繼資料匯出到名為 MyAccessMetadata的資料庫,你會在 Transact-SQL 程式碼開頭加上以下陳述:
USE MyAccessMetadata;
GO
下列範例都使用 dbo 結構描述。 如果您將元數據匯出至另一個架構,請務必在執行這些查詢時變更架構。
這些資料庫中有哪些數據表和數據行?
下列查詢會聯結包含數據行、數據表和資料庫元數據的數據表,然後傳回依數據行名稱排序的所有資料庫、數據表和數據行的名稱:
SELECT DatabaseName,
TableName,
ColumnName
FROM dbo.SSMA_Access_InventoryColumns AS C
INNER JOIN dbo.SSMA_Access_InventoryTables AS T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases AS 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 AS T
INNER JOIN dbo.SSMA_Access_InventoryDatabases AS 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 AS C
INNER JOIN dbo.SSMA_Access_InventoryTables AS T
ON C.TableId = T.TableId
INNER JOIN dbo.SSMA_Access_InventoryDatabases AS D
ON T.DatabaseId = D.DatabaseId
WHERE ColumnName LIKE '%salary%';
如果你不知道欄位名稱,可以寫一個查詢,透過移除這個查詢中的 WHERE 子句來回傳所有欄位。