Impostare o modificare le regole di confronto delle colonneSet or Change the Column Collation

È possibile ignorare le regole di confronto del database per i dati char, varchar, text, nchar, nvarchare ntext specificando regole di confronto diverse per una colonna specifica di una tabella e utilizzando uno degli elementi seguenti:You can override the database collation for char, varchar, text, nchar, nvarchar, and ntext data by specifying a different collation for a specific column of a table and using one of the following:

  • Clausola COLLATE di CREATE TABLE e ALTER TABLE.The COLLATE clause of CREATE TABLE and ALTER TABLE. Esempio:For example:

    CREATE TABLE dbo.MyTable  
      (PrimaryKey   int PRIMARY KEY,  
       CharCol      varchar(10) COLLATE French_CI_AS NOT NULL  
      );  
    GO  
    ALTER TABLE dbo.MyTable ALTER COLUMN CharCol  
                varchar(10)COLLATE Latin1_General_CI_AS NOT NULL;  
    GO  
    
  • SQL Server Management StudioSQL Server Management Studio.. Per altre informazioni, vedere Regole di confronto e supporto Unicode.For more information, Collation and Unicode Support.

  • Uso della proprietà Column.Collation in SQL ServerSQL Server Management Objects (SMO).Using the Column.Collation property in SQL ServerSQL Server Management Objects (SMO).

    Non è possibile modificare le regole di confronto di una colonna a cui fa riferimento uno qualsiasi degli elementi seguenti:You cannot change the collation of a column that is currently referenced by any one of the following:

  • Una colonna calcolataA computed column

  • Un indiceAn index

  • Le statistiche di distribuzione, generate automaticamente o tramite l'istruzione CREATE STATISTICSDistribution statistics, either generated automatically or by the CREATE STATISTICS statement

  • Un vincolo CHECKA CHECK constraint

  • Un vincolo FOREIGN KEYA FOREIGN KEY constraint

    Quando si usa il database tempdb, la clausola COLLATE include un'opzione database_default 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.When you work with tempdb, the COLLATE clause includes a database_default option to specify that a column in a temporary table uses the collation default of the current user database for the connection instead of the collation of tempdb.

Regole di confronto e colonne di tipo textCollations and text Columns

È possibile inserire o aggiornare valori in una colonna text le cui regole di confronto sono diverse dalla tabella codici delle regole di confronto predefinite del database.You can insert or update values in a text column whose collation is different from the code page of the default collation of the database. SQL ServerSQL Server converte in modo implicito i valori nelle regole di confronto della colonna. implicitly converts the values to the collation of the column.

Regole di confronto e database tempdbCollations and tempdb

Il database tempdb viene compilato a ogni avvio di SQL ServerSQL Server e presenta le stesse regole di confronto predefinite del database model .The tempdb database is built every time SQL ServerSQL Server is started and has the same default collation as the model database. Queste sono generalmente le stesse regole di confronto predefinite dell'istanza.This is typically the same as the default collation of the instance. Se si crea un database utente e si specificano regole di confronto predefinite diverse da quelle del database model, il database utente utilizzerà regole di confronto predefinite diverse da quelle di tempdb.If you create a user database and specify a different default collation than model, the user database has a different default collation than tempdb. Tutte le stored procedure temporanee o le tabelle temporanee vengono create e archiviate in tempdb.All temporary stored procedures or temporary tables are created and stored in tempdb. Di conseguenza, tutte le colonne implicite delle tabelle temporanee e tutte le costanti, le variabili e i parametri a cui possono essere assegnati valori predefiniti e che si trovano in stored procedure temporanee, utilizzano regole di confronto diverse da quelle degli oggetti analoghi creati in tabelle e stored procedure permanenti.This means that all implicit columns in temporary tables and all coercible-default constants, variables, and parameters in temporary stored procedures have collations that are different from comparable objects created in permanent tables and stored procedures.

Ciò può causare problemi derivanti da una non corrispondenza nelle regole di confronto tra i database definiti dall'utente e gli oggetti di database del sistema.This could lead to problems with a mismatch in collations between user-defined databases and system database objects. Si supponga ad esempio che un'istanza di SQL ServerSQL Server utilizzi le regole di confronto Latin1_General_CS_AS e di eseguire le seguenti istruzioni:For example, an instance of SQL ServerSQL Server uses the Latin1_General_CS_AS collation and you execute the following statements:

CREATE DATABASE TestDB COLLATE Estonian_CS_AS;  
USE TestDB;  
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  

In questo sistema nel database tempdb vengono utilizzate le regole di confronto Latin1_General_CS_AS con la tabella codici 1252, mentre in TestDB e TestPermTab.Col1 vengono utilizzate le regole di confronto Estonian_CS_AS con la tabella codici 1257.In this system, the tempdb database uses the Latin1_General_CS_AS collation with code page 1252, and TestDB and TestPermTab.Col1 use the Estonian_CS_AS collation with code page 1257. Esempio:For example:

USE TestDB;  
GO  
-- Create a temporary table with the same column declarations  
-- as TestPermTab  
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  
INSERT INTO #TestTempTab  
         SELECT * FROM TestPermTab;  
GO  

Con l'esempio precedente, il database tempdb utilizza le regole di confronto Latin1_General_CS_AS, mentre TestDB e TestTab.Col1 utilizzano le regole di confronto Estonian_CS_AS .With the previous example, the tempdb database uses the Latin1_General_CS_AS collation, and TestDB and TestTab.Col1 use the Estonian_CS_AS collation. Esempio:For example:

SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;  

Poiché tempdb utilizza le regole di confronto predefinite del server e TestPermTab.Col1 utilizza regole di confronto diverse, in SQL Server viene restituito un errore in cui viene indicato che è impossibile risolvere il conflitto delle regole di confronto tra Latin1_General_CI_AS_KS_WS ed Estonian_CS_AS nell'operazione.Because tempdb uses the default server collation and TestPermTab.Col1 uses a different collation, SQL Server returns this error: "Cannot resolve collation conflict between 'Latin1_General_CI_AS_KS_WS' and 'Estonian_CS_AS' in equal to operation."

Per evitare l'errore è possibile utilizzare una delle alternative seguenti:To prevent the error, you can use one of the following alternatives:

  • Specificare che per la colonna della tabella temporanea siano utilizzate le regole di confronto predefinite del database utente, anziché quelle del database tempdb.Specify that the temporary table column use the default collation of the user database, not tempdb. Ciò consente alla tabella temporanea di utilizzare tabelle con formattazione simile in più database, se ciò è richiesto dal sistema.This enables the temporary table to work with similarly formatted tables in multiple databases, if that is required of your system.

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE database_default  
       );  
    
  • Specificare le regole di confronto corrette per la colonna #TestTempTab :Specify the correct collation for the #TestTempTab column:

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE Estonian_CS_AS  
       );  
    

Vedere ancheSee Also

Impostazione o modifica di regole di confronto del server Set or Change the Server Collation
Impostare o modificare le regole di confronto del database Set or Change the Database Collation
Regole di confronto e supporto Unicode Collation and Unicode Support