共用方式為


COLLATE (Transact-SQL)

這是可套用至資料庫定義或資料行定義來定義定序,或套用至字元字串運算式來套用定序轉換的子句。

主題連結圖示 Transact-SQL 語法慣例

語法

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

引數

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

    Windows_collation_name 是 Windows 定序名稱的定序名稱。

    SQL_collation_name 是 SQL Server 定序名稱的定序名稱。

    在資料庫定義層級套用定序時,僅限 Unicode 的 Windows 定序就無法搭配 COLLATE 子句使用。

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

備註

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

  1. 建立或變更資料庫。

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

    [!附註]

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

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

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

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

  3. 轉換運算式的定序。

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

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

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

COLLATE 子句只適用於 char、varchar、text、nchar、nvarchar 和 ntext 資料類型。

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

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

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

SELECT name, description
FROM fn_helpcollations();

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

  • 當您建立或變更資料庫時,指定資料庫的預設定序。

  • 當您建立或變更資料表時,指定資料行的定序。

  • 當還原或附加資料庫時,作業系統必須支援資料庫的預設定序及資料庫中任何 char、varchar 和 text 資料行或參數的定序。

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

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

範例

A.在選取時指定定序

下列範例會建立簡單的資料表並且插入 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 (Transact-SQL) 範例 G. 建立資料庫並指定定序名稱和選項,以及 ALTER TABLE (Transact-SQL) 範例 V. 變更資料行定序

請參閱

參考

ALTER TABLE (Transact-SQL)

定序優先順序 (Transact-SQL)

常數 (Transact-SQL)

CREATE DATABASE (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

資料表 (Transact-SQL)

概念

定序與 Unicode 支援