COLLATE (Transact-SQL)

適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics AnalyticsPlatform System (PDW)Warehouse

定義資料庫或資料表資料行的定序,或套用至字元字串運算式時的定序轉換作業。 定序名稱可以是 Windows 定序名稱或 SQL 定序名稱。 若在資料庫建立期間未指定,會將 SQL Server 執行個體的預設定序指派給資料庫。 若未於資料表資料行建立期間指定,會將資料庫的預設定序指派給資料行。

Transact-SQL 語法慣例

Syntax

COLLATE { <collation_name> | database_default }
<collation_name> :: =
    { Windows_collation_name } | { SQL_collation_name }

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

collation_name 套用至運算式、資料行定義或資料庫定義的定序名稱。 collation_name 僅可以是指定的 Windows_collation_nameSQL_collation_namecollation_name 必須是常值。 collation_name 不可以變數或運算式表示。

Windows_collation_nameWindows 定序名稱的定序名稱。

SQL_collation_nameSQL Server 定序名稱的定序名稱。

注意

在 Microsoft Fabric 中,唯一允許的定序是:Latin1_General_100_BIN2_UTF8。

database_default 使 COLLATE 子句繼承目前資料庫的定序。

備註

您可以在許多層級指定 COLLATE 子句。 其中包括下列各項:

  1. 建立或變更資料庫。

    您可以使用 CREATE DATABASEALTER DATABASE 陳述式的 COLLATE 子句來指定資料庫的預設定序。 您也可以在使用 SQL Server Management Studio 建立資料庫時指定定序。 如果您沒有指定定序,就會將 SQL Server 執行個體的預設定序指派給資料庫。

    注意

    僅限 Windows Unicode 定序只能搭配 COLLATE 子句使用,以便將定序套用至資料行層級和運算式層級資料的 ncharnvarcharntext 資料類型。這些無法搭配 COLLATE 子句使用,來定義或變更資料庫或伺服器執行個體的定序。

  2. 建立或變更資料表資料行。

    您可以利用 CREATE TABLEALTER TABLE 陳述式的 COLLATE 子句來指定每個字元字串資料行的定序。 您也可以在使用 SQL Server Management Studio 建立資料表時指定定序。 如果您沒有指定定序,就會將資料庫的預設定序指派給資料行。

    您也可以利用 COLLATE 子句中的 database_default 選項,指定暫存資料表中的資料行使用連接目前的使用者資料庫 (而非 tempdb) 之定序預設值。

  3. 轉換運算式的定序。

    您可以利用 COLLATE 子句,將字元運算式套用至特定定序。 字元常值和變數會被指派目前資料庫的預設定序。 資料行參考會被指派資料行的定義定序。

識別碼的定序會隨定義的層級而不同。 執行個體層級物件 (如登入和資料庫名稱) 的識別碼會被指派執行個體的預設定序。 資料庫內之物件 (如資料表、檢視和資料行名稱) 的識別碼會被指派資料庫的預設定序。 例如,兩份大小寫不同的同名資料表,可以建立在定序區分大小寫的資料庫中,但不能建立在定序不區分大小寫的資料庫中。 如需詳細資訊,請參閱< Database Identifiers>。

當連接內容只有一個相關聯資料庫時,可以建立變數、GOTO 標籤、暫時預存程序和暫存資料表,之後當內容切換到另一個資料庫時,可以參考它們。 變數、GOTO 標籤、暫存預存程序和暫存資料表的識別碼都位於伺服器執行個體的預設定序中。

COLLATE 子句僅適用於 charvarchartextncharnvarcharntext 資料類型。

COLLATE 會使用 collate_name 參考要套用至運算式、資料行定義或資料庫定義之 SQL Server 定序或 Windows 定序的名稱。 collation_name 只可以是指定的 Windows_collation_nameSQL_collation_name,同時此參數必須包含常值。 collation_name 不可以變數或運算式表示。

定序通常是用定序名稱來識別,但在安裝程式中除外。 在安裝程式中,您會改為指定 Windows 定序的根定序指示項 (定序地區設定),然後再指定區分或不區分大小寫或腔調字的排序選項。

您可以執行系統函數 fn_helpcollations 來擷取 Windows 定序和 SQL Server 定序的所有有效定序名稱清單:

SELECT name, description
FROM fn_helpcollations();

SQL Server 只能支援基礎作業系統所支援的字碼頁。 當您執行視定序而定的動作時,所參考的物件使用的 SQL Server 定序必須使用電腦上執行的作業系統所支援的字碼頁。 這些動作包括:

  • 當您建立或變更資料庫時,指定資料庫的預設定序。
  • 當您建立或變更資料表時,指定資料行的定序。
  • 當還原或附加資料庫時,作業系統必須支援資料庫的預設定序及資料庫中任何 charvarchartext 資料行或參數的定序。

注意

支援 charvarchar 資料類型的字碼頁轉換,但不支援 text 資料類型的字碼頁轉換。 不會報告字碼頁轉換期間所遺失的資料。

如果指定的定序或所參考物件所用的定序使用 Windows 不支援的字碼頁,SQL Server 就會顯示錯誤。

範例

A. 在 SELECT 期間指定定序

下列範例會建立簡單的資料表並且插入 4 個資料列。 然後範例會在從資料表選取資料時套用兩個定序,並且示範如何以不同的方式排序 Chiapas

CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
                             , ('Cinco Rios'), ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO

以下是第一個查詢的結果。

Place
-------------
California
Chiapas
Cinco Rios
Colima

以下是第二個查詢的結果。

Place
-------------
California
Cinco Rios
Colima
Chiapas

B. 其他範例

如需使用 COLLATE 的其他範例,請參閱 CREATE DATABASE 範例 G. 建立資料庫並指定定序名稱和選項ALTER TABLE 範例 V. 變更資料行定序

另請參閱