分散式查詢中的定序

SQL Server 支援多個定序。每個資料行都可以有不同的定序,而且每個字元值都有關聯的定序屬性。SQL Server 會解譯從遠端資料來源而來的字元資料之定序屬性並加以處理它。

SQL Server 將使用遠端資料的定序來處理 Unicode 與非 Unicode 字元資料的比較與排序作業。遠端字元資料的定序資訊將取決於資料來源是否對應至 SQL Server 的執行個體:

  • Microsoft SQL Server Native Client OLE DB Provider 將自動報告提供者所傳回之每個資料行的定序。

  • 對於未在 SQL Server 中的遠端資料表,但已知其定序和 SQL Server 所支援的某個定序相同,系統管理員可將 OLE DB 資料來源的預設定序指定成連結伺服器定義的一部份。SQL Server 接著可使用預設的定序做為從連結伺服器傳回的所有資料行之定序。

當 SQL Server 決定了遠端字元資料行的定序之後,SQL Server 將遵循本機資料行的轉換、比較與操作規則,運作於遠端資料表資料行上。如需有關 SQL Server 套用至定序的規則,以及 SQL Server 所支援定序名稱的詳細資訊,請參閱<使用定序>。

如果預設遠端資料庫的定序與目前本機資料庫的定序不同,會將遠端字串視為 Unicode。若要確保所有的遠端伺服器都能以一致的方式處理字串,請執行下列動作:

  • 使用 Unicode 格式 N**'string'** 在分散式查詢中指定字串常值。

  • 定義包含明確目標資料庫的連結伺服器,而不是使用預設的遠端資料庫。此資料庫可能有不同的定序。

定義連結的伺服器選項

下列使用 sp_serveroption 所定義的連結伺服器選項,控制了 SQL Server 是否可以使用連結伺服器的定序以及其使用方式:

  • use remote collation 選項指定了是否使用遠端資料行或本機伺服器的定序。如果為 true,針對 SQL Server 資料來源會使用遠端資料行的定序,而針對非 SQL Server 資料來源會使用 collation name 中所指定的定序。若為 false,分散式查詢一定會使用本機伺服器執行個體的預設定序,而 collation name 與遠端資料行的定序則會被忽略。

  • 如果 use remote collation 為 true,而且資料來源不是 SQL Server 資料來源,collation name 選項可以指定遠端資料來源所使用的定序名稱。名稱必須為 SQL Server 所支援的定序之一。存取 SQL Server 之外的 OLE DB 資料來源,但其定序符合 SQL Server 定序之一時,請使用此選項。SQL Server 資料來源會報告它們的資料行定序,但忽略參考 SQL Server 資料來源之連結伺服器的定序名稱

    [!附註]

    使用連結的伺服器選項是使用遠端定序的唯一方法。因此,使用 OPENROWSET 與 OPENDATASOURCE 提供的特定名稱所建構的查詢,無法使用遠端字元資料的定序資訊。除此之外,所有已升級至 SQL Server 2000 或更新版本的 SQL Server 7.0 版中之所有連結伺服器,都會設定為 use remote collation=false。

選項設定的摘要

下表摘要當 use remote collation 設定為 true (或 on) 時,SQL Server 如何決定針對每個資料行所使用的定序。

連結伺服器類型

未設定定序名稱

已設定定序名稱 (設為 CollX)

SQL Server

遠端資料行的實際定序。

遠端資料行的實際定序。

其他

SQL Server 之本機執行個體的預設定序。

CollX

下表摘要當 use remote collation 設定為 false (或 off) 時,SQL Server 如何決定針對每個資料行所使用的定序。

連結伺服器類型

未設定定序名稱

已設定定序名稱 (設為 CollX)

SQL Server

SQL Server 之本機執行個體的預設定序。

SQL Server 之本機執行個體的預設定序。

其他

SQL Server 之本機執行個體的預設定序。

SQL Server 之本機執行個體的預設定序。