我有一个包含多个表的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条记录),我有两种情况:
Access报告查询由于主键违规而无法向sql server添加任何记录(但根本没有违规)。在这种情况下,我只是关闭访问并重新启动它......我得到第二种情况
运行查询Access告诉我它不能导入x记录(通常很少,10,21,32,通常看起来随机数最多为10000个中的100个),因为主键违规,但导入其余的。同样,无论如何都没有密钥违规,所有ID都是唯一的,正如autoinc字段在原始Access表中生成的那样。奇怪的是,如果我删除sql数据并再次运行查询,我会得到不同数量的未导入的记录,有时很少,有时甚至更多,但都在10000到10的范围内
我也尝试使用Access 2007,但同样的事情发生了。
Sql server表与主表有外键关系,但我尝试导入的数据也满足了这种关系。
有谁知道遇到这个问题并知道解决方案吗?
由于
PS:我不使用sql server导入向导,因为有很多工作要通过sql server转换访问数据 - 访问选择查询已经完成,它们相当复杂,使用一些用VBA编写的函数,这只是为了这个目的而难以重写为tsql答案 0 :(得分:3)
这是一次性交易吗?如果是这样,为什么不使用Access并将表和数据导出到SQL服务器然后进入并清理?这就是我过去做过的方式
答案 1 :(得分:1)
我经历过很多次这样的事情。 Access的错误消息通常会产生误导。我没有直接的回答,但这就是我要做的事情。
在sql server中创建一个与目标sql server表结构相匹配的空表,但不要对它施加任何约束。
然后将访问数据复制到该表中。
现在使用管理工作室(或您使用的任何sql接口)并从假表插入真实表。如果它有效,那么我不知道该告诉你什么。如果它不起作用,您的管理工作室应该给您一个更好的错误消息,以便您可以弄清楚是什么。
-Don