2010-03-19 118 views
2

我有一个Access数据库(在Access 2003中)有几个表,并且数据必须导入到Sql Server 2005. Access数据的结构与sql server不同数据库,所以我创建了各种查询,将其转换为Sql Server所需的格式。基本上在SQL Server每个表我有两个查询:产生的字段名和与SQL表兼容的类型选择查询,以及追加查询其基本上没有通过Access查询从Access数据库导入到Sql Server时出现的问题

Insert into [Sql_table] (field1, field2, ...) 
Select [field1, field2, ...] from [Access_table] 

SQL和原始访问表具有主键自动递增,并将其包含在查询中。

当我运行插入查询和源选择查询没有很多记录(多达几百个)所有工作正常,记录插入确定,与原来的身份

但当源查询有更多的记录(我有超过10000条记录几张桌子),我有两种情况:

  1. 或者访问报告查询不能任何记录到SQL Server由于主键冲突增加(但没有侵犯可言)。在这种情况下,我只需关闭访问并重新启动它...我得到第二种情况

  2. 运行查询访问告诉我它不能导入x记录(通常很少,10,21,32,通常似乎随机数了由于主键违规而导致超过10000个中的100个),但导入其余的。同样,无论如何都没有关键违规,所有的ID都是唯一的,如通过autoinc字段在原始Access表中生成的。奇怪的是,如果我再次删除SQL数据和运行查询,我得到不同数量的未导入,有时少,有时更多的记录,但都在10-50范围内出10000

我试着与Access 2007一样,但同样的事情发生。

Sql服务器表具有与主表的外键关系,但这种关系也可以通过我尝试导入的数据来满足。

有没有人知道面临这个问题,并知道一个解决方案?

感谢

PS:我不使用SQL Server导入向导自会有办法很多工作通过访问SQL Server中的数据转换 - 选择查询已经取得的访问,他们是相当复杂的,使用一些使用VBA编写的函数,难以仅仅为了这个目的而重写为tsql

回答

1

我已经运行了很多次这样的事情。 Access的错误信息往往是误导性的。我没有一个直接的答案给你,但这是我会做..

创建一个空的表匹配SQL Server中的目标SQL Server表的结构,但不要对其施加任何约束。

然后将访问数据复制到该表中。

现在使用管理工作室(或者您使用的任何sql界面),并从假表插入真正的表。如果它有效,那么我不知道该告诉你什么。如果它不起作用,你的管理工作室应该给你一个更好的错误信息,以便你能够弄清楚发生了什么。

-Don

+0

多亏用同样的方式,我已经试过了,但它变得复杂,因为有参与这个几个表,并重新创建它们,清洗它们都变得耗时 – bzamfir 2010-03-20 14:00:27

3

这是一次性交易吗?如果是这样,为什么不使用Access并将表和数据导出到SQL服务器,然后进入并清理?这是我在过去

some info

+0

它不会经常需要,但也不是一次性交易。目前,使用sql server的应用程序正在开发中,并且随着新应用程序中的相应模块的导入,我导入旧的访问表。通常我决定在sql表中进行更改,并且需要重新调整访问转换查询,并重新导入。在这个周末我做了大约20-30次,因为我不得不测试sql server增量db结构更新,看看新的导入是否正常。所以基本上,仍然有必要重复执行此操作 – bzamfir 2010-03-20 14:00:45

+0

我的情况是,我在访问数据库中获得大约150万行,然后将其导出到sql server,大约需要20分钟。 – jim 2010-03-20 17:32:41

+1

我支持吉姆的建议。首先将数据加载到sql server上的原始数据表中,并将约束降至最低。其次证明人口的完整性。第三将原始数据附加到带有添加约束条件的表(例如主键等)中,并查看错误消息以查找未能追加的记录。 – heferav 2010-03-22 08:52:00