我正在尝试编写一个应用程序,它将信息从 SQL Server 数据库中取出,通过 Web 服务加载对象模型,然后将该信息传递到 Access DB,该数据库基于与 SQL Server 不同的架构数据库,但包含的信息是相同的(所以我认为这类似于 ETL 过程)。我遇到的问题是,我正在提取信息的数据库(SQL Server)中的主键是 GUID,而我将它们放入(Access)的数据库是 INT。例如:
表 1,SQL Server 中的 Persons 表:
╔══════════════════════════════════════╦══════════╦════════════╗
║ ID ║ Name ║ CreatedOn ║
╠══════════════════════════════════════╬══════════╬════════════╣
║ 3648F6BB-F743-4952-9C69-93336667F3B1 ║ Person 1 ║ 01/01/2012 ║
║ DE44577A-CAE7-4101-B962-C052214E723B ║ Person 2 ║ 02/01/2012 ║
║ 94115C5E-9C7E-40CF-8A87-D4D837BD5DB3 ║ Person 3 ║ 03/01/2012 ║
║ F93E77D9-C344-420C-9499-BA3B4DD0F0BA ║ Person 4 ║ 04/01/2012 ║
╚══════════════════════════════════════╩══════════╩════════════╝
表 2,Access 中的 Persons 表:
╔════╦══════════╦════════════╗
║ ID ║ Name ║ CreatedOn ║
╠════╬══════════╬════════════╣
║ 1 ║ Person 1 ║ 01/01/2012 ║
║ 2 ║ Person 2 ║ 02/01/2012 ║
║ 3 ║ Person 3 ║ 03/01/2012 ║
║ 4 ║ Person 4 ║ 04/01/2012 ║
╚════╩══════════╩════════════╝
所以表 1 是数据在 SQL Server 数据库中是如何返回的,表 2 是信息在 Access 数据库中应该如何出现。所以所有的 GUID 都应该是整数,但数据之间的关系应该保持不变。因此,例如,如果我在 SQL Server 和 Access 中运行查询以获取此人的地址(地址表也将类似地设置),则无论是否使用 GUID 或整数,查询都应返回相同的结果。
我在想的是在 SQL Server 中使用 ROW_NUMBER(),按 CreatedOn 日期排序(这是数据库中的日期时间类型,因此在所有记录中应该是唯一的):
SELECT
(ROW_NUMBER() OVER (ORDER BY CreatedOn)) AS ID,
Name,
CreatedOn
FROM Table2;
唯一的问题是,我看到查询返回了重复的整数 ID。例如,上面的表 1 如下所示:
╔════╦══════════╦════════════╗
║ ID ║ Name ║ CreatedOn ║
╠════╬══════════╬════════════╣
║ 1 ║ Person 1 ║ 01/01/2012 ║
║ 2 ║ Person 2 ║ 02/01/2012 ║
║ 1 ║ Person 3 ║ 03/01/2012 ║
║ 1 ║ Person 4 ║ 04/01/2012 ║
╚════╩══════════╩════════════╝
当每个 ID 应该是唯一的。谁能想到一个好方法来做我想要完成的事情?我目前尝试这样做的方式有什么问题吗?
任何帮助将不胜感激。