使用分散式查詢的指導方針

只要提供者可支援所需的 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 仍可支援。

  • 只要提供者符合 INSERT 陳述式的 OLE DB 需求,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),就無法在更新或插入作業中參考具有大型物件資料類型 (例如 text、ntext 或 image) 的資料行。如需詳細資訊,請參閱<設定分散式查詢的 OLE DB 提供者>。

  • 資料定義語言陳述式 (例如 CREATE、ALTER 或 DROP 陳述式) 不能用於連結伺服器上。

  • EXECUTE 陳述式可以使用 AT 關鍵字將通過命令傳遞到連結伺服器。執行此陳述式的能力取決於連結伺服器的 RPC 組態以及連結伺服器接受此陳述式執行的能力。

  • 沒有其他資料庫層級的作業或陳述式可用於連結伺服器上。

其他指導方針

以下是一些額外的限制和指導方針:

  • STATIC 或非感應式資料指標可參考遠端資料表。若 OLE DB provider 符合某些需求,KEYSET 資料指標將可參考遠端資料表。如需有關這些需求的詳細資訊,請參閱<OLE DB 提供者的索引鍵集導向資料指標需求>。沒有其他類型的資料指標可參考遠端資料表。

  • 預存程序只支援用於 SQL Server 資料來源。

  • 您必須先將連接的 ANSI_NULLS 與 ANSI_WARNINGS 選項設為 ON,該連接才能執行分散式查詢。如需詳細資訊,請參閱<SET ANSI_DEFAULTS (Transact-SQL)>。

  • 若要在您使用連結伺服器上的資料表時建立最佳查詢計畫,查詢處理器必須擁有來自連結伺服器的資料分佈統計資料。對於資料表的任何資料行擁有有限權限的使用者可能沒有足夠的權限可以取得所有實用的統計資料,而且可能會收到比較沒效率的查詢計畫且效能較差。如果連結的伺服器是 SQL Server 的執行個體,使用者必須擁有資料表,或者使用者必須是連結伺服器上系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色或 db_ddladmin 固定資料庫角色的成員,才能取得所有可用的統計資料。