匯出 Access 庫存(AccessToSQL)
如果您有多個 Access 資料庫,而且不確定要移轉至 SQL Server 哪一個資料庫,則可以匯出專案中所有 Access 資料庫的清查。 然後,您可以檢閱和查詢清查元數據,以判斷要移轉之資料庫中哪些資料庫和物件。 此清查可讓您快速尋找問題的解答,例如下列清單:
- 最大的資料庫為何?
- 誰擁有大部分的資料庫?
- 哪些資料庫包含相同的數據表?
- 過去六個月沒有修改哪些資料庫?
- 哪些資料庫包含私人資訊?
本文結尾會提供用來回答這些問題的查詢範例。
匯出的元數據
SSMA 會匯出 Access 資料庫、數據表、數據行、索引、外鍵、查詢、報表、表單、巨集和模組的相關元數據。 這些項目類別的元數據會匯出至個別的數據表。 如需這些數據表的架構,請參閱 存取清查架構。
匯出清查數據
若要匯出 Access 清查,您必須先開啟或建立 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 的詳細資訊,請參閱 連線到 SQL Server (AccessToSQL)。
匯出清查資訊
在 [存取元數據總管] 中,展開 Access-metabase。
選取 資料庫旁的複選框。
若要省略個別資料庫或資料庫物件,請展開 [Databases] 資料夾,然後清除資料庫或資料庫物件旁的複選框。
以滑鼠右鍵按兩下 [資料庫],然後選取 [匯出架構。
在 [選取匯出 架構] 對話框中,選取匯出元數據的目標架構,然後選取 [確定] 。
每次匯出元數據時,SSMA 都會將數據附加至庫存。 清查中的現有數據不會更新或刪除。
查詢導出的元數據
匯出有關 Access 資料庫的元數據之後,您可以查詢元數據。 下列指示說明如何使用 SQL Server Management Studio 中的 [查詢編輯器] 視窗來執行查詢。
查詢元數據
從 [開始] 功能表,指向 [所有程式],指向 [Microsoft SQL Server 2005] 或 [Microsoft SQL Server 2008] 或 [Microsoft SQL Server 2012],然後選取 [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 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 子句。