Condividi tramite


COLLATE (Transact-SQL)

Clausola che è possibile applicare a una definizione di database o di colonna per definire le regole di confronto oppure a un'espressione stringa di caratteri per applicare il casting delle regole di confronto.

Si applica a: SQL Server (SQL Server 2008 tramite versione corrente), Database SQL di Windows Azure (versione iniziale tramite versione corrente).

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • collation_name
    Nome delle regole di confronto da applicare all'espressione o alla definizione di colonna o del database. collation_name può essere solo un valore di Windows_collation_name o di SQL_collation_name specificato. collation_name deve essere un valore letterale. collation_name non può essere rappresentato da una variabile o un'espressione.

    Windows_collation_name corrisponde al nome delle regole di confronto per un nome delle regole di confronto di Windows.

    SQL_collation_name corrisponde al nome delle regole di confronto per un nome delle regole di confronto di SQL Server.

    In caso di applicazione di regole di confronto al livello di definizione del database, le regole di confronto solo Unicode di Windows non possono essere utilizzate con la clausola COLLATE.

  • database_default
    La clausola COLLATE eredita le regole di confronto del database corrente.

Osservazioni

È possibile specificare la clausola COLLATE a vari livelli, ad esempio:

  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. È inoltre possibile specificare una regola di confronto durante la creazione di un database tramite SQL Server Management Studio. Se non vengono specificate regole di confronto, al database verranno assegnate le regole di confronto predefinite dell'istanza di SQL Server.

    Nota

    Le regole di confronto solo Unicode di Windows possono essere utilizzate solo con la clausola COLLATE per applicare regole di confronto ai tipi di dati nchar, nvarchar e ntext su dati a livello di colonna e a livello di espressione. Tali regole non possono essere utilizzate con la clausola COLLATE per 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. È inoltre possibile specificare una regola di confronto durante la creazione di una tabella tramite SQL Server Management Studio. Se non vengono specificate regole di confronto, alla colonna verranno assegnate le regole di confronto predefinite del database.

    È inoltre possibile utilizzare l'opzione database_default nella clausola COLLATE per specificare che una colonna di una tabella temporanea utilizza le regole di confronto predefinite del database utente corrente per la connessione anziché quelle del database 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 nel quale viene 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 i cui nomi si differenziano soltanto per l'utilizzo del maiuscolo e del minuscolo possono essere create in un database con regole di confronto in cui l'uso di maiuscole e minuscole è rilevante, ma non in un database con regole di confronto in cui l'uso di maiuscole e minuscole non è rilevante. Per ulteriori 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 utilizza collate_name per fare riferimento al nome delle regole di confronto di SQL Server o di Windows da applicare all'espressione o alla definizione di colonna o del database. collation_name può essere solo un valore di Windows_collation_name o di SQL_collation_name specificato e il parametro deve contenere un valore letterale. collation_name non può essere rappresentato da una variabile o 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 di 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 utilizzate dall'oggetto a cui si fa riferimento devono utilizzare 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, le regole di confronto predefinite del database e delle colonne o dei parametri di tipo char, varchar e text del database devono essere supportate dal sistema operativo.

    Le conversioni tra tabelle codici sono supportate per i tipi di dati char e varchar, ma non per il tipo di dati text. L'eventuale perdita di dati che si verifica durante la conversione tra tabelle codici non viene segnalata.

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

Esempi

A.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 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

Di seguito vengono riportati i risultati dalla prima query.

Place

-------------

California

Chiapas

Cinco Rios

Colima

Di seguito vengono riportati i risultati dalla seconda query.

Place

-------------

California

Cinco Rios

Colima

Chiapas

B.Esempi aggiuntivi

Per ulteriori esempi in cui viene utilizzato COLLATE, vedere l'CREATE DATABASE (Transact-SQL di SQL Server)esempio G. Creazione di un database e specifica del nome e delle opzioni di una regola di confronto e l'ALTER TABLE (Transact-SQL)esempio V. Modifica delle regole di confronto colonna.

Vedere anche

Riferimento

ALTER TABLE (Transact-SQL)

Precedenza delle regole di confronto (Transact-SQL)

Costanti (Transact-SQL)

CREATE DATABASE (Transact-SQL di SQL Server)

CREATE TABLE (SQL Server)

DECLARE @local\_variable (Transact-SQL)

table (Transact-SQL)

Concetti

Regole di confronto e supporto Unicode