我的情况是我有20个Access数据库。每个表都有相同的15个表,但数据不同。 (20个数据库中的每个表的名称和模式都相同)。
我想创建一个具有相同结构的新数据库,并用所有20个原始数据库的内容填充它,所以我有一个包含15个大表的数据库,而不是20个数据库和15个较小的表。
我必须在SQL中完成所有操作,因为我通过这个Ruby Acess库连接 - http://rubyonwindows.blogspot.com/2007/06/using-ruby-ado-to-work-with-ms-access.html
任何人都可以帮我解决SQL问题吗?我真正需要的只是将源数据库中的一个表的所有记录追加到目标数据库中的一个表的示例。
哦,为了使事情变得复杂一点,每个db中的15个表中的每个表都有不同的字段集,有些字段有很多字段(40个左右)。因此,当我复制行时,完美的惰性解决方案不需要我列出表中的每个字段。这可能吗?
答案 0 :(得分:1)
如果您有可用的SQL服务器,则可以使用SQL Server Integration Services(SSIS)。
通过它,您可以使用GUI和向导来传输数据。
答案 1 :(得分:1)
基本sql是一个"insert into select"语句。为了缩短它,我将调用您的20个数据库,如DB1,DB2,... DB20和您的“最终”数据库DBFinal。
懒惰的解决方案将重新获取主舍尔的字段名称 - 最好列出字段(因为你可以自动生成sql语句或使用你的应用程序或ER图中的任何一个)
1)创建DBFinal,禁用主键的自动增量(这样你就可以从DB1,DB2中插入主键值,... 2)生成一个选择,为每个表选择所有行和列。像:
SELECT key, atrb1, atrb2 FROM table1
3)通过使用文本复制粘贴组装“insert into select”语句,如:
INSERT into DBFinal.user.table1 (key, atrb1, atrb2) SELECT key, atrb1, atrb2 FROM table1
4) 如果你在不同的数据库中获得相同的键值(对于不同的值),你需要更改所有主键 - 外键值,这样你就不会在目标数据库中得到重复项。我建议添加一个值(DBFinal中的行数+ 1)。 INSERT到DBFinal中的table1(key,atrb1,atrb2) SELECT键+ 9001,atrb1,atrb2 FROM table1