远程SQL SERVER数据导出到本地ACCESS的问题

时间:2022-07-30 09:20:38
我想把远程SQL SERVER的数据导出到本地ACCESS中

如果sql server是本地的话
insert into   openrowset ('Microsoft.Jet.OLEDB.4.0', 'I:test.mdb';'admin';'',test) (ObjectID, MobileTel)  (select MsgID, MobileTel from status),这样写没问题

请问高手sql server在远程计算机上应该怎么写?


8 个解决方案

#1


--在Access查询中,如何用SQL访问SQL Server中的表?


多种方式:

1、用链接表。

2、用传递查询。

3、直接在本地查询串中指定连接信息即可,如下:

select * from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]

INSERT INTO 目标库表名 (字段列表) IN ODBC[ODBC;Driver=SQL Server;Server=服务器名或IP;Uid=sa;Pwd=密码;database=数据库名]
SELECT 字段列表
from Access本地表


传递查询和链接表,两者工作原理不同:

1、传递查询:将需要查询到本地的数据的SQL语句写在传递查询中,执行后,只返回符合查询条件的数据。

2、链接表:打开链接表时,返回所连接SQL Server表的全部数据。




要导入表中的数据,需要先创建DSN。

-->控制面板
-->管理工具
-->数据源 (ODBC)
-->选择“文件DSN”页
-->添加
-->选择最后一行:SQL Server
-->指定数据源名称,只要好记即可
-->指定要连接的服务器名或IP,本机可以用.
-->选择SQL Server混合验证,输入用户和密码
-->更改默认数据库为你要连接的数据库
-->完成
-->然后在你的MDB中创建链接表时,选此数据源即可。


使用链接表时,建议使用文件数据源创建链接表,与机器无关,拷贝到别的机器上可以直接使用,无须再手工或用代码创建ODBC。

三种数据源比较:

文件DSN
ODBC文件数据源允许用户连接到数据提供程序。文件DSN可以由安装了相同驱动程序的用户共享。

用户DSN
ODBC用户数据源存储了如何与指定数据提供程序连接的信息。用户数据源只对当前用户可见,而且只能用于当前机器上。

系统DSN
ODBC系统数据源村除了如何与指定数据提供程序连接的信息。系统数据源对当前机器上的所有用户可见,包括NT服务。

#2


在ACCESS中:
select * into newtt from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]
or
insert into newtt
select * from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]
注意两种数据库的字段类型不一定相同,有些类型ACCESS不支持

#3


谢谢!还有一个问题顺便问一下
update test t set t.state = (select status from note_status n in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB] where n.msgid = t.objectid)
执行这条语句为什么提示操作必需使用一个可更新的查询?
这条语句的效率如何?

#4


Access的update中目标值不能使用子查询。

#5


用表关联。

如:

update A inner join B on A.id=B.id set A.name=B.name

或者将外部数据用传递查询。


然后再用表关联。

#6


update test t, (select status from note_status in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB] ) b
set t.state=b.status where b.msgid = t.objectid
试试
最好建立链接表,再替换

#7


select * from note_status n in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB]
存为查询
update test t,查询 b set t.state=b.status where b.msgid = t.objectid

#8


用查询作中转,然后再关联你要更新的表。


如:

update 表名 a inner join 查询名 b on a.id=b.id set a.name=b.name



Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=


#1


--在Access查询中,如何用SQL访问SQL Server中的表?


多种方式:

1、用链接表。

2、用传递查询。

3、直接在本地查询串中指定连接信息即可,如下:

select * from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]

INSERT INTO 目标库表名 (字段列表) IN ODBC[ODBC;Driver=SQL Server;Server=服务器名或IP;Uid=sa;Pwd=密码;database=数据库名]
SELECT 字段列表
from Access本地表


传递查询和链接表,两者工作原理不同:

1、传递查询:将需要查询到本地的数据的SQL语句写在传递查询中,执行后,只返回符合查询条件的数据。

2、链接表:打开链接表时,返回所连接SQL Server表的全部数据。




要导入表中的数据,需要先创建DSN。

-->控制面板
-->管理工具
-->数据源 (ODBC)
-->选择“文件DSN”页
-->添加
-->选择最后一行:SQL Server
-->指定数据源名称,只要好记即可
-->指定要连接的服务器名或IP,本机可以用.
-->选择SQL Server混合验证,输入用户和密码
-->更改默认数据库为你要连接的数据库
-->完成
-->然后在你的MDB中创建链接表时,选此数据源即可。


使用链接表时,建议使用文件数据源创建链接表,与机器无关,拷贝到别的机器上可以直接使用,无须再手工或用代码创建ODBC。

三种数据源比较:

文件DSN
ODBC文件数据源允许用户连接到数据提供程序。文件DSN可以由安装了相同驱动程序的用户共享。

用户DSN
ODBC用户数据源存储了如何与指定数据提供程序连接的信息。用户数据源只对当前用户可见,而且只能用于当前机器上。

系统DSN
ODBC系统数据源村除了如何与指定数据提供程序连接的信息。系统数据源对当前机器上的所有用户可见,包括NT服务。

#2


在ACCESS中:
select * into newtt from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]
or
insert into newtt
select * from Orders in [ODBC][ODBC;Driver=SQL Server;Server=.;Uid=sa;Pwd=0;database=Northwind]
注意两种数据库的字段类型不一定相同,有些类型ACCESS不支持

#3


谢谢!还有一个问题顺便问一下
update test t set t.state = (select status from note_status n in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB] where n.msgid = t.objectid)
执行这条语句为什么提示操作必需使用一个可更新的查询?
这条语句的效率如何?

#4


Access的update中目标值不能使用子查询。

#5


用表关联。

如:

update A inner join B on A.id=B.id set A.name=B.name

或者将外部数据用传递查询。


然后再用表关联。

#6


update test t, (select status from note_status in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB] ) b
set t.state=b.status where b.msgid = t.objectid
试试
最好建立链接表,再替换

#7


select * from note_status n in [ODBC][ODBC;Driver=SQL Server;Server=IP;Uid=sa;Pwd=;database=DB]
存为查询
update test t,查询 b set t.state=b.status where b.msgid = t.objectid

#8


用查询作中转,然后再关联你要更新的表。


如:

update 表名 a inner join 查询名 b on a.id=b.id set a.name=b.name



Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。


JET SQL 帮助(jet4 access2000)下载地址

http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=