不兼容的访问功能 (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]) 是一个有效语句,即使 schema 和 FOR 为保留关键字。 此外,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 中。 |