不兼容的访问功能 (AccessToSQL)

并非所有 Access 数据库功能都与 SQL Server 兼容。 例如,SQL Server 和 Access 有不同的保留关键字集。 此类问题可能会对成功迁移到 SQL Server 造成阻碍。 使用下表了解可能的迁移问题以及可采取的操作。

可能会影响迁移的数据库设置或功能

Access 数据库设置或功能 迁移问题
Access 表没有唯一索引。 如果没有唯一索引的表迁移到 SQL Server,则迁移后无法对该表进行修改。 这可能会导致应用程序出现兼容性问题。

转换 Access 数据库对象时,“输出”窗口将列出没有唯一索引的所有 Access 表。

可以将 Access 配置为在转换期间在 SQL Server 表中添加主键。 有关详细信息,请参阅“项目设置(转换)”。
Access 表有复制列。 如果包含复制系统列的 Access 表迁移到 SQL Server,则 Jet 复制功能将在迁移后中断。

迁移后,考虑使用 SQL Server 复制来维护数据库的同步副本。
具有唯一索引的 Access 表包含多个 Null 值。 在 8.13 之前,不能将具有唯一索引和多个 Null 值的 Access 表传输到 SQL Server,因为在 SQL Server 中,唯一索引不允多个 Null 值。 对这些表进行的迁移将失败。

SSMA 将在评估报告中标记此问题。 若要创建评估报告,请参阅“评估 Access 数据库对象以进行转换”。

如果存在此问题,必须确保主键没有重复的 Null 值。 或者,必须移除包含多个 Null 值的主键或唯一索引。
Access 表包含了超出 SQL Server 范围的日期值。 SQL Server 日期/时间类型仅接受 1753 年 1 月 1 日至 9999 年 12 月 31 日范围内的日期。 Access 接受 100 年 1 月 1 日到 9999 年 12 月 31 日范围内的日期。

SSMA 将在评估报告中标记此问题。 若要创建评估报告,请参阅“评估 Access 数据库对象以进行转换”。

可以配置 SSMA 如何解析 SQL Server 范围外的日期。 有关详细信息,请参阅“项目设置(迁移)”。
Access 中的索引长度超过了 900 字节。 SQL Server 索引对索引键列的总大小限制为 900 字节。 如果 Access 表使用较大的索引,则 SSMA 将显示警告。

如果继续数据迁移,则迁移可能失败。
Access 对象名称为 SQL Server 关键字,或包含特殊字符。 Access 和 SQL Server 具有不同的保留关键字集和特殊字符集。 如果使用带括号或带引号的标识符(例如 "select" 或 [select].p),SQL Server 将接受使用 SQL Server 关键字命名或包含特殊字符的对象。 有关详细信息,请参阅 SQL Server 联机丛书中的“分隔标识符(数据库引擎)”。

注意:若要使用引号分隔标识符,SET QUOTED_IDENTIFIER必须为 ON。

例如,CREATE TABLE [schema](c1 [FOR]) 是一个有效语句,即使 schemaFOR 为保留关键字。 此外,CREATE TABLE [xxx*yyy](c1 x&y) 是一个有效语句,即使表和列名包含特殊字符 *&

引用这些对象的所有查询还必须使用带括号或引号的名称。 例如,查询 SELECT * FROM schema 将失败。 正确的查询为:SELECT * FROM [schema]

转换 Access 数据库对象时,“输出”窗格将列出使用关键字或特殊字符的所有 Access 表。 可以修改 Access 中的表,然后再次移除和添加数据库;或者,可以修改引用这些对象的查询,以便查询使用括号或引号来分隔标识符。 如果不修改查询,则 Access 应用程序可能会返回错误或遇到其他问题。
主键/外键关系中的字段大小有所不同。 SQL Server 不支持具有不同数据类型或大小且具有外键约束的链接列的 Jet 功能。

转换 Access 数据库对象时,“输出”窗口将列出不会转换为 SQL Server 的所有主键/外键约束。 可以更改 Access 列中的数据类型和大小,以便它们匹配,然后移除并重新添加 Access 数据库。 或者,你可以迁移数据,尽管不会在 SQL Server 中创建这些约束。
Access 关系中引用的表既没有主键也没有唯一索引。 Access 接受被引用表没有主键或唯一索引的表关系。 但是,SQL Server 不支持此关系。

转换 Access 数据库对象时,“输出”窗口将列出具有关系但没有主键或唯一索引的所有表。 可以更改表以添加主键或唯一索引,然后移除并重新添加 Access 数据库。 或者,可以迁移数据,尽管表之间的关系将中断。
Access 表有超链接列。 SQL Server 不支持超链接列。 相反,这些列会被视为 Access 备注列。 默认情况下,这些列将转换为 SQL Server 中的 nvarchar(max) 列。 可以自定义映射。 有关详细信息,请参阅“映射源数据类型和目标数据类型”。
默认表达式或验证规则表达式包含无法转换为 SQL Server 或 SQL Azure 的 Access 函数。 Access 默认表达式或验证规则可能会包括 Access 系统函数或未映射到 SQL Server 或 SQL Azure 的用户定义函数。 使用未映射到 SQL Server 或 SQL Azure 的函数会阻止将默认表达式或验证规则加载到 SQL Server 或 SQL Azure 中。

另请参阅

准备 Access 数据库以进行迁移
将 Access 数据库迁移到 SQL Server