使用 MSSQL Server 从 MS ACCESS 数据库中选择数据记录

Posted

技术标签:

【中文标题】使用 MSSQL Server 从 MS ACCESS 数据库中选择数据记录【英文标题】:SELECT data records from MS ACCESS database using MSSQL Server 【发布时间】:2015-12-22 07:25:37 【问题描述】:

我已经成功地从另一个工作站创建了一个链接,我可以查看 MS ACCESS 数据库中的所有表。但我无法使用简单的SELECT 语句从表中检索数据。

SELECT * FROM [192.168.1.64].default.dbo.CHECKINOUT;

当我执行这个查询时,我得到了这个错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'default'.

我也找到了这个查询:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=192.168.1.64;Trusted_Connection=yes;',
     'SELECT *
      FROM default.dbo.CHECKINOUT') AS a;
GO

但出现此错误:

Configuration option 'show advanced options' changed from 1 to 1. Run the RECONFIGURE statement to install.
Configuration option 'Ad Hoc Distributed Queries' changed from 1 to 1. Run the RECONFIGURE statement to install.
OLE DB provider "SQLNCLI10" for linked server "(null)" returned message "Login timeout expired".
OLE DB provider "SQLNCLI10" for linked server "(null)" returned message "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.".
Msg 1231, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [1231]. 

【问题讨论】:

Default 是一个关键字。试试[192.168.1.64].[default].dbo.CHECKINOUT @Igor - 我的代码出现此错误:Msg 7312, Level 16, State 1, Line 1 Invalid use of schema or catalog for OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "192.168.1.64". A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema. 我没有关注这里发生的事情。 SQLNCLI 和 SQLNCLI10 是用于连接到其他 SQL Server 实例的提供程序。通常对于 MS Access,您需要使用 Jet 4.0 提供程序 (Microsoft.Jet.OLEDB.4.0) 或 ACE 提供程序 (Microsoft.ACE.OLEDB.12.0)。请参阅示例here。请注意,提供程序采用文件路径,而不是网络位置。这个 Access 数据库究竟是如何设置的?工作站是否安装了另一个 SQL Server 实例? @BaconBits,其他工作站没有安装 SQL Server。而且我正在尝试访问其他工作站,这意味着文件路径看起来像:\\192.168.1.64\C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb ? 试试SELECT * FROM [192.168.1.64]...[CHECKINOUT] 【参考方案1】:

在 SQL Server 中创建指向 Access 数据库的链接服务器时,我们指的是特定的数据库文件,因此“目录”和“架构”在该上下文中没有实际意义。因此,在 T-SQL 中将 Access 表指定为四部分名称时,我们只需省略第二部分和第三部分:

SELECT * FROM [AccessLinkedServerName]...[TableName]

或者,在你的情况下

SELECT * FROM [192.168.1.64]...[CHECKINOUT]

【讨论】:

以上是关于使用 MSSQL Server 从 MS ACCESS 数据库中选择数据记录的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 2008 中的空值处理

如何在Linux上安装和使用MS SQL Server

自动将新数据从 MS Access 数据库导入 SQL Server

离线安装 VScode MS SQL Server 插件

PHP + MS SQL Server 字符编码

如何从 php 连接到 mssql?