分布式查询的使用准则

更新日期: 2006 年 7 月 17 日

只要访问接口支持所需的 OLE DB 接口,则本主题中所提到的每一类 Transact-SQL 语句均可以使用。

Transact-SQL 语句

以下列表列出了 Transact-SQL 语言的一些子集,可对通过基于链接服务器的名称或临时名称访问的远程表使用这些子集:

  • 所有具有标准格式 SELECT select_list FROM 子句 WHERE 子句的查询均允许使用。当 new_table_name 引用远程表时,不允许使用 SELECT 语句的 INTO new_table_name 子句。
  • 在 SELECT、INSERT、UPDATE 和 DELETE 语句中,不能用单个部分或四个部分组成的表名限制远程表中的列。应在 FROM 子句中指定远程表的别名,并且别名应用于限定列名。
  • 无法查询包含 xml 列的表,即使查询可以访问该表中的非 xml 列。
  • 将远程表中的大型对象 (LOB) 列指定为 SELECT 语句的 select_list 中的项时,SELECT 语句不能包含 ORDER BY 子句。
  • IS NULL 和 IS NOT NULL 谓词不能引用远程表中的 LOB 列。
  • 当查询中还包含 WHERE 子句时,在分布式查询中不能使用 GROUP BY ALL。支持不指定 ALL 的 GROUP BY 子句。
  • 只要访问接口符合 OLE DB 对 INSERT 语句的要求,就允许对远程表使用 INSERT 语句。有关详细信息,请参阅 OLE DB 访问接口的执行 INSERT 的条件
  • 无法通过分布式查询将 NULL 常量插入 timestamp 列中。
  • 分布式查询不支持 $IDENTITY 和 $ROWGUIDCOL。无法将显式值插入远程表中的标识列。
  • 如果访问接口符合指定表的 OLE DB 接口要求,则允许对远程表使用 UPDATE 和 DELETE 语句。有关详细信息,请参阅 OLE DB 访问接口的 UPDATE 和 DELETE 语句要求
  • 如果访问接口符合对某个远程表进行更新的条件,那么当在 UPDATE 或 DELETE 语句(UPDATE 或 DELETE remote_table WHERE CURRENT OF cursor_name)中指定了该远程表时,即可通过在分布式查询中定义的游标对该远程表进行更新或删除。有关详细信息,请参阅在分布式查询中使用游标
  • 不支持对远程表使用 READTEXT、WRITETEXT 和 UPDATETEXT 语句。
  • 如果在 SQL Server 进程外对访问接口进行实例化,并且访问接口选项 AllowInProcess 为 0,则无法在更新或插入操作中引用具有大型对象数据类型(如 textntextimage)的列。有关详细信息,请参阅为分布式查询配置 OLE DB 访问接口
  • 不允许对链接服务器使用数据定义语言语句(如 CREATE、ALTER 或 DROP 语句)。
  • 支持对链接服务器使用指定传递命令的 EXECUTE 语句。可以使用此语句对 SQL Server 以外的访问接口执行存储过程。
  • 不允许对链接服务器执行其他数据库级的操作或语句。

其他准则

下面是其他一些限制和准则:

  • STATIC 或 INSENSITIVE 游标可以引用远程表。如果 OLE DB 访问接口满足某些要求,则 KEYSET 游标可以引用远程表。有关这些要求的详细信息,请参阅由键集驱动的游标对 OLE DB 访问接口的要求。其他类型的游标不可以引用远程表。
  • 只对 SQL Server 数据源支持存储过程。
  • 必须先将连接的 ANSI_NULLS 和 ANSI_WARNINGS 选项设置为 ON,然后该连接才能执行分布式查询。有关详细信息,请参阅 SET ANSI_DEFAULTS (Transact-SQL)

请参阅

概念

在分布式查询中使用事务
分布式查询的数据类型映射
分布式查询

其他资源

SELECT (Transact-SQL)
EXECUTE (Transact-SQL)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

新增内容:
  • 添加了说明无法查询包含 xml 列的表的条目。