如果有多个 Access 数据库,并且不确定要将哪些数据库迁移到SQL Server,则可以导出项目中所有 Access 数据库的清单。 然后,可以查看和查询清单元数据,以确定这些数据库中要迁移的数据库和对象。 通过此清单可以快速找到问题的答案,如下所示:

  • 最大的数据库是什么?

  • 谁拥有大部分数据库?

  • 哪些数据库包含相同的表?

  • 过去六个月未修改哪些数据库?

  • 哪些数据库包含私人信息?

    本主题末尾提供了用于回答这些问题的查询示例。

    导出的元数据

    SSMA 导出有关 Access 数据库、表、列、索引、外键、查询、报表、窗体、宏和模块的元数据。 有关每个项目类别的元数据将导出到单独的表中。 有关这些表的架构,请参阅 访问清单架构

    导出清单数据

    若要导出 Access 清单,必须先打开或创建 SSMA 项目,然后添加要分析的 Access 数据库。 将数据库添加到 SSMA 项目后,将有关这些数据库的元数据导出到指定的SQL Server数据库和架构。 如有必要,SSMA 会创建表来存储元数据。 然后,SSMA 将有关 Access 数据库的元数据添加到SQL Server数据库。

    Access 数据库可以拆分为多个文件:一个后端数据库,其中包含表和前端数据库,其中包含查询、窗体、报表、宏、模块和快捷方式。 如果要将拆分数据库迁移到SQL Server,请将前端数据库添加到 SSMA。

    以下说明介绍了如何创建项目、将数据库添加到项目、连接到SQL Server,然后导出清单数据。

  • 打开 SSMA for Access。

  • 在“文件”菜单中,选择“新建项目”。

    将显示“新建项目”对话框。

  • 在“ 名称 ”框中,输入项目的名称。

  • 在“ 位置 ”框中,输入或选择项目的文件夹。

  • 在“ 迁移到 ”组合框中,选择要迁移到的目标版本,然后单击“ 确定 ”。

    有关创建项目的详细信息,请参阅 创建和管理项目

    查找和添加数据库

  • 在“ 文件 ”菜单上,单击“ 查找数据库 ”。

  • 在“查找数据库向导”中,输入要搜索的驱动器、文件路径或 UNC 路径。 或者,单击“ 浏览 ”以选择驱动器或网络文件夹。

  • 单击“ 添加 ”将位置添加到列表框。

    重复上述两个步骤以添加其他搜索位置。

  • (可选)添加搜索条件以优化返回的数据库列表。

    全部或部分文件名 ”文本框不支持通配符。

  • 单击“扫描”。

    此时将显示“扫描”页。 这会显示已找到的数据库和搜索进度。 若要停止搜索,请单击“ 停止 ”。

  • 在“选择文件”页上,选择要添加到项目的每个数据库。

    可以使用列表顶部的 “全选 ”和“ 全部清除 ”按钮来选择或清除所有数据库。 还可以按住 Ctrl 键以选择多行,或按住 SHIFT 键以选择一系列行。

  • 单击“下一步”。

  • 在“验证”页上,单击“ 完成 ”。

    有关将数据库添加到项目的详细信息,请参阅 添加和删除 Access 数据库文件

    连接到 SQL Server

  • 在“ 文件 ”菜单上,选择“ 连接到SQL Server ”。

  • 在“连接”对话框中,输入或选择SQL Server实例的名称。

  • 如果要连接到本地计算机上的默认实例,则可以输入 localhost 或点 ( . ) 。

  • 如果要连接到另一台计算机上的默认实例,请输入计算机的名称。

  • 如果要连接到命名实例,请输入计算机名称、反斜杠和实例名称。 例如:MyServer\MyInstance。

  • 在“ 数据库 ”框中,输入导出元数据的目标数据库的名称。

  • 如果 SQL Server 实例配置为接受非默认端口上的连接,请在“服务器端口”框中输入用于SQL Server连接的 端口号 。 对于 SQL Server 的默认实例,默认端口号为 1433。 对于命名实例,SSMA 会尝试从SQL Server浏览器服务获取端口号。

  • “身份验证 ”下拉菜单中,选择要用于连接的身份验证类型。 若要使用当前 Windows 帐户,请选择“ Windows 身份验证 ”。 若要使用SQL Server登录名,请选择“ SQL Server身份验证 ”,然后提供用户名和密码。

    有关连接到 SQL Server 的详细信息,请参阅 连接到 SQL Server (AccessToSQL)

    导出库存信息

  • 在“Access 元数据资源管理器”中,展开 “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;  
    

    以下示例都使用 dbo 架构。 如果将元数据导出到另一个架构,请确保在运行这些查询时更改架构。

    这些数据库中有哪些表和列?

    以下查询联接包含列、表和数据库元数据的表,然后返回按列名称排序的所有数据库、表和列的名称:

    SELECT DatabaseName, TableName, ColumnName   
    FROM dbo.SSMA_Access_InventoryColumns C  
    JOIN dbo.SSMA_Access_InventoryTables T  
    ON C.TableId = T.TableId  
    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  
    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  
    JOIN dbo.SSMA_Access_InventoryTables T  
    ON C.TableId = T.TableId  
    JOIN dbo.SSMA_Access_InventoryDatabases D  
    ON T.DatabaseId = D. DatabaseId  
    WHERE ColumnName LIKE '%salary%';  
    

    如果不知道列名,可以编写查询以返回所有列。 为此,请从上一个查询中删除 WHERE 子句。

    准备用于迁移的 Access 数据库

  •