共用方式為


COLLATE(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的倉庫Microsoft Fabric 中的 SQL 資料庫

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

Transact-SQL 語法慣例

語法

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

引數

collation_name

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

Windows_collation_nameWindows 定序名稱的定序名稱。

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

注意

在 Microsoft Fabric 數據倉儲中,COLLATE 語句中的 SELECT 子句不受限制,而且可以套用不支援的定序。 在 Microsoft 網狀架構資料倉儲中,所有倉儲預設都會以區分大小寫的 (CS) 定序設定 Latin1_General_100_BIN2_UTF8。 您也可以 建立不區分大小寫 (CI) 定序的倉儲Latin1_General_100_CI_AS_KS_WS_SC_UTF8

不過,只有支援的定序可以搭配 COLLATECREATE TABLEALTER TABLE ADD nullable columnSELECT INTO (CTAS) 語句中的 CREATE TABLE AS SELECT 子句使用。

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

備註

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

  1. 建立或變更資料庫。

    您可以使用 CREATE DATABASEALTER DATABASE 陳述式的 COLLATE 子句來指定資料庫的預設定序。 您也可以在使用 SQL Server Management Studio 建立資料庫時指定定序。 如果您未指定定序,資料庫會指派 SQL Server 實例的預設定序。

    注意

    僅限 Windows Unicode 定序只能與 COLLATE 子句搭配使用,將定序套用至 ncharnvarchar,以及 ntext 數據行層級和表達式層級數據的數據類型:這些無法與 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 a 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
-- Using LIKE
SELECT Place FROM Locations
WHERE Place COLLATE Latin1_General_CI_AS LIKE 'C%' ASC;
GO

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

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

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

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

以下是第三個 SELECT 查詢的結果。

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

B. 其他範例

如需使用 COLLATE的其他範例,請參閱 CREATE DATABASEALTER TABLE