天天看點

分布式查詢的使用準則Transact-SQL 語句其他準則

隻要通路接口支援所需的 OLE DB 接口,則本主題中所提到的每一類 Transact-SQL 語句均可以使用。

以下清單列出了 Transact-SQL 語言的一些子集,可對通過基于連結伺服器的名稱或臨時名稱通路的遠端表使用這些子集:

所有具有标準格式 SELECT select_list FROM 子句 WHERE 子句的查詢均允許使用。當

new_table_name 引用遠端表時,不允許使用 SELECT 語句的 INTO new_table_name

子句。

在 SELECT、INSERT、UPDATE 和 DELETE 語句中,不能用單個部分或四個部分組成的表名限制遠端表中的列。應在 FROM

子句中指定遠端表的别名,并且别名應用于限定列名。

無法查詢包含 <b>xml</b> 列的表,即使查詢可以通路該表中的非 <b>xml</b> 列。

将遠端表中的大型對象 (LOB) 列指定為 SELECT 語句的 select_list 中的項時,SELECT 語句不能包含 ORDER

BY 子句。

IS NULL 和 IS NOT NULL 謂詞不能引用遠端表中的 LOB 列。

當查詢中還包含 WHERE 子句時,在分布式查詢中不能使用 GROUP BY ALL。支援不指定 ALL 的 GROUP BY 子句。

隻要通路接口符合 OLE DB 對 INSERT 語句的要求,就允許對遠端表使用 INSERT 語句。有關詳細資訊,請參閱 。

無法通過分布式查詢将 NULL 常量插入 <b>timestamp</b> 列中。

分布式查詢不支援 $IDENTITY 和 $ROWGUIDCOL。無法将顯式值插入遠端表中的辨別列。

如果通路接口符合指定表的 OLE DB 接口要求,則允許對遠端表使用 UPDATE 和 DELETE 語句。有關詳細資訊,請參閱

如果通路接口符合對某個遠端表進行更新的條件,那麼當在 UPDATE 或 DELETE 語句(UPDATE 或 DELETE

remote_table WHERE CURRENT OF

cursor_name)中指定了該遠端表時,即可通過在分布式查詢中定義的遊标對該遠端表進行更新或删除。有關詳細資訊,請參閱。

不支援對遠端表使用 READTEXT、WRITETEXT 和 UPDATETEXT 語句。

如果在 SQL Server 程序外對通路接口進行執行個體化,則無法在更新或插入操作中引用具有大型對象資料類型(如

<b>text</b>、<b>ntext</b> 或 <b>image</b>)的列,通路接口選項 AllowInProcess 為

0。有關詳細資訊,請參閱。

不允許對連結伺服器使用資料定義語言語句(如 CREATE、ALTER 或 DROP 語句)。

EXECUTE 語句可以使用 AT 關鍵字向連結伺服器發送傳遞指令。能否執行該語句取決于連結伺服器的 RPC

配置,還取決于連結伺服器能否執行該語句。

不允許對連結伺服器執行其他資料庫級的操作或語句。

下面是其他一些限制和準則:

STATIC 或 INSENSITIVE 遊标可以引用遠端表。如果 OLE DB 通路接口滿足某些要求,則 KEYSET

遊标可以引用遠端表。有關這些要求的詳細資訊,請參閱。其他類型的遊标不可以引用遠端表。

隻對 SQL Server 資料源支援存儲過程。

必須先将連接配接的 ANSI_NULLS 和 ANSI_WARNINGS 選項設定為 ON,然後該連接配接才能執行分布式查詢。有關詳細資訊,請參閱

若要在某一連結伺服器上使用表時建立最佳查詢計劃,查詢處理器必須具有來自該連結伺服器的資料分布統計。對表的任何列具有有限權限的使用者可能沒有足夠的權限來擷取所有有用的統計,并且可能會收到效率較低的查詢計劃和經曆不佳的性能。如果連結伺服器是

SQL Server 的執行個體,若要擷取所有可用的統計,使用者必須擁有該表或者是連結伺服器上 sysadmin 固定伺服器角色、db_owner 固定資料庫角色或者

db_ddladmin 固定資料庫角色的成員。