Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » OLE DB 和 ADO 开发

 

Microsoft 链接服务器

可创建一个能使用 SQL Anywhere OLE DB 提供程序来获得对 SQL Anywhere 数据库的访问权限的 Microsoft 链接服务器。可使用 Microsoft 的表引用语法(由四部分组成)或 Microsoft 的 OPENQUERY SQL 函数来发出 SQL 查询。下面就是一个由四部分组成的语法的示例。

SELECT * FROM SADATABASE.demo.GROUPO.Customers

在本例中,SADATABASE 是链接服务器的名称,demo 是目录或数据库名,GROUPO 是 SQL Anywhere 数据库中的表所有者,而 Customers 是 SQL Anywhere 数据库中的表名。

另一种形式是使用 Microsoft 的 OPENQUERY 函数。

SELECT * FROM OPENQUERY( SADATABASE, 'SELECT * FROM Customers' )

在 OPENQUERY 语法中,第二个 SELECT 语句 ('SELECT * FROM Customers') 被传递到 SQL Anywhere 服务器中执行。

对于复杂查询,由于整个查询是在 SQL Anywhere 服务器上进行计算的,所以可能更适合使用 OPENQUERY。通过由四部分组成的语法,SQL Server 可能会先检索该查询所引用的所有表的内容,然后才能对查询进行计算(如包含 WHERE、JOIN 的查询以及嵌套查询等)。如果查询中涉及到非常大的表,则使用由四部分组成的语法时,处理时间可能会很长。在以下由四部分组成的查询示例中,SQL Server 通过 OLE DB 提供程序向 SQL Anywhere 数据库服务器传递一条对整个表的简单 SELECT 子句(无 WHERE 子句),然后再计算 WHERE 条件本身。

SELECT ID, Surname, GivenName FROM [SADATABASE].[demo].[GROUPO].[Customers]
WHERE Surname = 'Elkins'

将返回结果集中的所有行,然后由 SQL Server 将此结果集减至一行,而不是向 SQL Server 返回结果集中的一行。以下示例产生的结果相同,但仅向 SQL Server 返回一行。

SELECT * FROM OPENQUERY( SADATABASE, 
    'SELECT ID, Surname, GivenName FROM [GROUPO].[Customers]
    WHERE Surname = ''Elkins''' )

可以用 Microsoft SQL Server 交互应用程序或 SQL Server 脚本来设置使用 SQL Anywhere OLE DB 提供程序的链接服务器。

注意

若使用 Windows Vista 或更高版本的 Windows,则设置链接服务器之前需要注意几个事项。SQL Server 作为系统上的服务运行。根据服务在 Windows Vista 或更高版本上的设置方式,服务可能无法使用共享内存连接,无法启动服务器,以及无法访问用户数据源定义。例如,作为网络服务登录的服务无法启动服务器,无法通过共享内存连接,也无法访问用户数据源。这些情况下,SQL Anywhere 服务器必须提前启动并且必须使用 TCPIP 通信协议。此外,如果要使用数据源,则该数据源必须是系统数据源。


使用交互应用程序设置链接服务器
使用脚本设置链接服务器