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.
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 di database. collation_name può corrispondere solo al valore specificato in Windows_collation_name o SQL_collation_name. collation_name deve essere un valore letterale. collation_name non può essere rappresentato da una variabile o da 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:
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.
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.
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. Per ulteriori informazioni sulle regole di confronto di un'espressione, vedere Precedenza delle regole di confronto (Transact-SQL).
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.
È 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.
Nella clausola COLLATE viene utilizzato collate_name per fare riferimento al nome delle regole di confronto di SQL Server oppure a quelle di Windows da applicare all'espressione, alla definizione di colonna o alla definizione del database. collation_name può essere solo un Windows_collation_name o un SQL_collation_name 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 di SQL Server:
SELECT *
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 una tabella semplice in cui vengono inserite 4 righe. Nell'esempio vengono quindi applicate due regole di confronto quando si selezionano i dati dalla tabella, illustrando come Chiapas vengono ordinati in modo diverso.
CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas');
INSERT Locations(Place) VALUES ('Colima');
INSERT Locations(Place) VALUES ('Cinco Rios');
INSERT Locations(Place) VALUES ('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
B. Esempi aggiuntivi
Per ulteriori esempi in cui si utilizza COLLATE, vedere l'esempio CREATE DATABASE (Transact-SQL)Creazione di un database e specifica di un nome delle regole di confronto e delle opzioni e l'esempio ALTER TABLE (Transact-SQL)V. Modifica delle regole di confronto di una colonna.
Vedere anche