Condividi tramite


COLLATE (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Analytics Platform System (PDW)Warehouse in Microsoft Fabric

Definisce le regole di confronto di un database o di una colonna di database, o un'operazione di cast di regole di confronto se applicata all'espressione della stringa di caratteri. È possibile usare nomi di regole di confronto di Windows o SQL. Se non viene specificato durate la creazione del database, al database vengono assegnate le regole di confronto predefinite dell'istanza di SQL Server. Se non viene specificato durate la creazione della colonna della tabella, alla colonna vengono assegnate le regole di confronto predefinite del database.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

collation_name è il nome delle regole di confronto da applicare all'espressione o alla definizione di colonna o di database. In collation_name è possibile usare solo un Windows_collation_name o un SQL_collation_name specificato. collation_name deve essere un valore letterale. collation_name non può essere rappresentato da una variabile o da un'espressione.

Windows_collation_name è il nome delle regole di confronto per un Nome delle regole di confronto di Windows.

SQL_collation_name è il nome delle regole di confronto per un Nome delle regole di confronto di SQL Server.

Nota

In Microsoft Fabric, le uniche regole di confronto consentite sono: Latin1_General_100_BIN2_UTF8.

database_default specifica che la clausola COLLATE eredita le regole di confronto del database corrente.

Osservazioni:

È possibile specificare la clausola COLLATE a vari livelli, Di seguito sono elencate le quattro opzioni disponibili.

  1. In fase di creazione o modifica di un database.

    La clausola COLLATE dell'istruzione CREATE DATABASE o ALTER DATABASE consente di specificare le regole di confronto predefinite del database. È anche possibile specificare una regola di confronto quando si crea un database usando SQL Server Management Studio. Se non si specificano regole di confronto, al database vengono assegnate le regole di confronto predefinite dell'istanza di SQL Server.

    Nota

    Le regole di confronto solo Unicode di Windows possono essere usate solo con la clausola COLLATE per applicare regole di confronto ai nchar, nvarchare ntext tipi di dati sui dati a livello di colonna e a livello di espressione; non possono essere usati con la clausola COLLATE per definire o modificare le regole di confronto di un database o di un'istanza del server.

  2. In fase di creazione o modifica di una colonna di tabella.

    È possibile specificare le regole di confronto di ogni colonna contenente stringhe di caratteri tramite la clausola COLLATE dell'istruzione CREATE TABLE o ALTER TABLE. È anche possibile specificare una regola di confronto quando si crea una tabella usando SQL Server Management Studio. Se non si specificano regole di confronto, alla colonna vengono assegnate le regole di confronto predefinite del database.

    È anche possibile utilizzare l'opzione database_default nella clausola COLLATE per specificare che una colonna in una tabella temporanea utilizza il valore predefinito delle regole di confronto del database utente corrente per la connessione anziché tempdb.

  3. In fase di casting delle regole di confronto di un'espressione.

    Tramite la clausola COLLATE è possibile applicare un'espressione di caratteri a regole di confronto specifiche. Ai valori letterali e alle variabili di tipo carattere vengono assegnate le regole di confronto predefinite del database corrente. Ai riferimenti di colonna vengono assegnate le regole di confronto di definizione della colonna.

Le regole di confronto di un identificatore dipendono dal livello in cui è definito. Agli identificatori degli oggetti a livello di istanza, quali gli account di accesso e i nomi di database, vengono assegnate le regole di confronto predefinite dell'istanza. Agli identificatori degli oggetti di un database, quali tabelle, viste e nomi di colonna, vengono assegnate le regole di confronto predefinite del database. Ad esempio, due tabelle con nomi diversi solo nel caso in cui vengano create in un database con regole di confronto con distinzione tra maiuscole e minuscole, ma potrebbero non essere create in un database con regole di confronto senza distinzione tra maiuscole e minuscole. Per altre informazioni, vedere Identificatori del database.

È possibile creare variabili, etichette GOTO, stored procedure temporanee e tabelle temporanee se il contesto di connessione è associato a un singolo database, e quindi fare riferimento ad esse quando il contesto passa a un altro database. Gli identificatori di variabili, le etichette GOTO, le stored procedure temporanee e le tabelle temporanee sono inclusi nelle regole di confronto predefinite dell'istanza del server.

È possibile applicare la clausola COLLATE solo ai tipi di dati char, varchar, text, nchar, nvarchar e ntext.

COLLATE usa collate_name per fare riferimento al nome delle regole di confronto di SQL Server o di Windows da applicare all'espressione, alla definizione di colonna o alla definizione del database. In collation_name è possibile usare solo un Windows_collation_name o un SQL_collation_name specificato e il parametro deve contenere un valore letterale. collation_name non può essere rappresentato da una variabile o da un'espressione.

Le regole di confronto sono identificate in genere da un nome, ad eccezione che nel programma di installazione. Nel programma di installazione viene invece specificata la designazione delle regole di confronto radice (le impostazioni locali delle regole di confronto) per le regole di confronto di Windows, quindi vengono specificate le opzioni di ordinamento che possono rispettare o meno la distinzione tra maiuscole e minuscole e tra caratteri accentati e non accentati.

È possibile eseguire la funzione di sistema fn_helpcollations per recuperare un elenco di tutti i nomi validi per le regole di confronto di Windows e SQL Server:

SELECT name, description
FROM fn_helpcollations();

SQL Server supporta solo le tabelle codici supportate dal sistema operativo corrente. Quando si esegue un'azione che dipende dalle regole di confronto, le regole di confronto di SQL Server usate dall'oggetto a cui si fa riferimento devono usare una tabella codici supportata dal sistema operativo in esecuzione nel computer. Queste azioni includono:

  • Impostazione delle regole di confronto predefinite per un database utilizzate durante la creazione o la modifica del database.
  • Impostazione delle regole di confronto per una colonna utilizzate durante la creazione o la modifica di una tabella.
  • Durante il ripristino o il collegamento di un database è necessario che le regole di confronto predefinite del database e quelle delle colonne o dei parametri di tipo char, varchar e text presenti nel database siano supportate dal sistema operativo.

Nota

Le conversioni tra tabelle codici sono supportate per i tipi di dati char e varchar, ma non per il tipo di dati text. La perdita di dati durante le traduzioni della tabella codici non viene segnalata.

Se le regole di confronto specificate o adottate dall'oggetto cui viene fatto riferimento usano una tabella codici non supportata dai sistemi operativi Windows, in SQL Server viene visualizzato un errore.

Esempi

R. Specifica delle regole di confronto durante una SELEZIONE

Nell'esempio seguente viene creata la tabella semplice in cui vengono inserite 4 righe. Quindi vengono applicate due regole di confronto durante la selezione dei dati dalla tabella per dimostrare che Chiapas viene ordinato in modo differente.

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

Ecco i risultati della prima query SELECT.

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

Ecco i risultati della seconda query SELECt.

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

Ecco i risultati della terza query SELECt.

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

B. Esempi aggiuntivi

Per altri esempi in cui viene usata la clausola COLLATE, vedere CREATE DATABASE, esempio G. Creazione di un database e specifica di un nome delle regole di confronto e delle opzioni e ALTER TABLE, esempio V. Modifica delle regole di confronto di una colonna.