如何用VBA将Access 2013表复制/迁移至SQL Server?语法报错求助
解决Access生成表查询导出到SQL Server的语法错误问题
我来帮你搞定这个问题!你遇到的报错是因为Access SQL里SELECT INTO导出到SQL Server的语法用错了,原语句里直接把OLEDB连接字符串放在INTO后面的括号里,这不符合Access的语法规范。下面给你两种正确的实现方式:
方法一:直接用IN子句指定SQL Server连接字符串
这是最直接的方式,不需要提前创建链接表,把连接字符串放在IN关键字后面的单引号中即可:
SELECT * INTO AAAANewTable IN 'Provider=SQLOLEDB;SERVER=stserver;DATABASE=stdatabase;UID=userid;PWD=userpass' FROM AAAANewTable WITH OWNERACCESS OPTION;
这里的逻辑是:在指定的SQL Server数据库里创建名为AAAANewTable的新表,然后把Access本地表AAAANewTable的数据导入进去。
方法二:通过Access链接表操作(更适合重复使用)
如果你后续需要多次往SQL Server同步数据,建议先在Access里创建指向SQL Server的链接表:
- 在Access里通过「外部数据」选项卡,创建链接表,选择SQL Server作为数据源,填入你的服务器、数据库、账号密码信息,指定链接表名称(比如
Linked_AAAANewTable)。 - 之后就可以用更简洁的SQL语句操作:
- 如果SQL Server里还没有目标表,用
SELECT INTO创建并导入:SELECT * INTO Linked_AAAANewTable FROM AAAANewTable WITH OWNERACCESS OPTION; - 如果SQL Server里已经存在目标表,用
INSERT INTO追加数据(如果需要覆盖的话可以先加DELETE FROM Linked_AAAANewTable):INSERT INTO Linked_AAAANewTable SELECT * FROM AAAANewTable WITH OWNERACCESS OPTION;
- 如果SQL Server里还没有目标表,用
额外注意事项
- 确保你的SQL Server账号拥有创建表和插入数据的权限,否则会遇到权限报错;
- 检查Access源表的字段名,如果包含SQL Server的保留字(比如
User、Date、Order等),需要给字段名加上方括号[],比如[User]; - 仔细核对连接字符串里的服务器名、数据库名、账号密码,拼写错误也会导致连接失败。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

