从Access数据库通过Access查询导入到Sql Server时出现问题

时间:2010-03-19 20:00:57

标签: sql sql-server-2005 ms-access import

我有一个包含多个表的Access数据库(在Access 2003中),并且必须将数据导入到Sql Server 2005.访问数据与sql server数据库的结构不同,所以我创建了各种查询,将其转换为格式Sql Server需要的。基本上对于sql server中的每个表,我有两个查询:一个Select查询,它生成与sql表兼容的字段名和类型,以及一个基本上执行的附加查询

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

Sql和原始访问表都有主键Autoinc,我将它包含在查询中。

当我运行插入查询并且源选择查询没有很多记录(最多几百个)时,一切正常,记录插入正常,带有原始标识

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

  1. Access报告查询由于主键违规而无法向sql server添加任何记录(但根本没有违规)。在这种情况下,我只是关闭访问并重新启动它......我得到第二种情况

  2. 运行查询Access告诉我它不能导入x记录(通常很少,10,21,32,通常看起来随机数最多为10000个中的100个),因为主键违规,但导入其余的。同样,无论如何都没有密钥违规,所有ID都是唯一的,正如autoinc字段在原始Access表中生成的那样。奇怪的是,如果我删除sql数据并再次运行查询,我会得到不同数量的未导入的记录,有时很少,有时甚至更多,但都在10000到10的范围内

  3. 我也尝试使用Access 2007,但同样的事情发生了。

    Sql server表与主表有外键关系,但我尝试导入的数据也满足了这种关系。

    有谁知道遇到这个问题并知道解决方案吗?

    由于

    PS:我不使用sql server导入向导,因为有很多工作要通过sql server转换访问数据 - 访问选择查询已经完成,它们相当复杂,使用一些用VBA编写的函数,这只是为了这个目的而难以重写为tsql

2 个答案:

答案 0 :(得分:3)

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

some info

答案 1 :(得分:1)

我经历过很多次这样的事情。 Access的错误消息通常会产生误导。我没有直接的回答,但这就是我要做的事情。

在sql server中创建一个与目标sql server表结构相匹配的空表,但不要对它施加任何约束。

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

现在使用管理工作室(或您使用的任何sql接口)并从假表插入真实表。如果它有效,那么我不知道该告诉你什么。如果它不起作用,您的管理工作室应该给您一个更好的错误消息,以便您可以弄清楚是什么。

-Don