我正在尝试编写一个应用程序,它将从SQL Server数据库中提取信息,通过Web服务加载对象模型,然后将该信息传递到一个基于不同模式的Access DB中,但其中包含的信息是相同的(因此我认为这类似于ETL过程)。我遇到的问题是,我从SQL Server拉取信息的主键是GUIDs,而我将它们放入的数据库(Access)是INTs。例如:
表1,SQL Server中的Persons表:
表1是SQL Server数据库中返回的数据,表2是Access数据库中应该显示的信息。所有GUID都应该是整数,但数据之间的关系应保持不变。例如,如果我在SQL Server和Access中运行查询以获取人员的地址(地址表也应类似设置),则无论使用GUID还是整数,查询都应返回相同的结果。
我的想法是在SQL Server中使用ROW_NUMBER(),按CreatedOn日期排序(这是数据库中的日期时间类型,因此应在所有记录中唯一):
表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 ║
╚══════════════════════════════════════╩══════════╩════════════╝
在Access中的表2,人员表:
╔════╦══════════╦════════════╗
║ 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都应该是唯一的。有没有人能想出一个好的方法来完成我正在尝试的事情?我目前的做法是否有问题?
任何帮助都将不胜感激。