Impostare o cambiare le regole di confronto del database

Si applica a: SQL Server Istanza gestita di SQL di Azure

Questo articolo descrive come impostare o modificare le regole di confronto del database usando SQL Server Management Studio (SSMS) o Transact-SQL.

Se non viene specificata alcuna regola di confronto del database, vengono utilizzate le regole di confronto del server.

Consigli

È possibile trovare i nomi delle regole di confronto supportate in Nome delle regole di confronto di Windows e delle regole di confronto di SQL Server oppure è possibile usare la funzione di sistema sys.fn_helpcollations.

Quando si modificano le regole di confronto del database, vengono modificati i seguenti elementi:

  • Qualsiasi char, varchar, text, nchar, nvarcharo colonna ntext nelle tabelle di sistema viene impostata sulle nuove regole di confronto.

  • Tutti i parametri esistenti di tipo char, varchar, text, nchar, nvarcharo ntext , i valori scalari restituiti per le stored procedure e le funzioni definite dall'utente vengono modificati in base alle nuove regole di confronto.

  • I tipi di dati di sistema char, varchar, text, nchar, nvarcharo ntext e tutti i tipi di dati definiti dall'utente basati su tali tipi di dati di sistema vengono modificati in base alle nuove regole di confronto predefinite.

È possibile modificare le regole di confronto di qualsiasi nuovo oggetto creato in un database utente usando la clausola COLLATE dell'istruzione ALTER DATABASE. Questa istruzione non consente di modificare le regole di confronto delle colonne delle tabelle definite dall'utente esistenti. Per modificare le regole di confronto delle colonne, è necessario usare la clausola COLLATE dell'istruzione ALTER TABLE.

Autorizzazioni

Per creare un nuovo database è richiesta l'autorizzazione CREATE DATABASE nel database master, oppure CREATE ANY DATABASE, o l'autorizzazione ALTER ANY DATABASE.

Per modificare le regole di confronto di un database esistente è richiesta l'autorizzazione ALTER per il database.

Impostare o cambiare le regole di confronto del database

È possibile impostare o modificare le regole di confronto del database usando SQL Server Management Studio (SSMS) o Transact-SQL (T-SQL).

È possibile specificare le regole di confronto per un nuovo database o aggiornare le regole di confronto per un database esistente usando SQL Server Management Studio (SSMS).

In SQL Server Management, aprire Esplora oggetti, connettersi a un'istanza del motore di database di SQL Server, espanderla e quindi espandere Database:

  • Se si crea un nuovo database, fare clic con il pulsante destro del mouse su Database, quindi selezionare Nuovo database. Se non si desidera usare le regole di confronto predefinite, selezionare la pagina Opzioni e quindi le regole di confronto dall'elenco a discesa Regole di confronto.
  • Per un database esistente: fare clic con il pulsante destro del mouse sul database desiderato e scegliere Proprietà. Selezionare la pagina Opzioni e selezionare le regole di confronto dall'elenco a discesa Regole di confronto.

Dati dopo la modifica delle regole di confronto

Importante

La modifica delle regole di confronto di un database o di singole colonne non modifica i dati sottostanti già archiviati nelle tabelle esistenti. A meno che l'applicazione non gestisca in modo esplicito la conversione e il confronto dei dati tra regole di confronto diverse, è consigliabile eseguire la transizione dei dati esistenti nel database alle nuove regole di confronto. Si evita così il rischio che le applicazioni modifichino erroneamente i dati, causando possibili risultati errati o una perdita di dati invisibile all'utente.

Quando si modificano le regole di confronto del database, solo le nuove tabelle erediteranno le nuove regole di confronto del database per impostazione predefinita. Sono disponibili diverse alternative per convertire i dati esistenti nelle nuove regole di confronto:

  • Convertire i dati sul posto. Per convertire le regole di confronto per una colonna in una tabella esistente, vedere Impostare o modificare le regole di confronto della colonna. Questa operazione è facile da implementare, ma può diventare un problema che causa un blocco per tabelle di grandi dimensioni e applicazioni a uso intensivo. Vedere l'esempio seguente per una conversione sul posto della colonna MyString per nuove regole di confronto:

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Copiare i dati nelle nuove tabelle che usano le nuove regole di confronto e sostituire le tabelle originali nello stesso database. Creare una nuova tabella nel database corrente che erediterà le regole di confronto del database, copiare i dati tra la tabella precedente e la nuova tabella, eliminare la tabella originale e rinominare la nuova tabella con il nome della tabella originale. Si tratta di un'operazione più rapida rispetto a una conversione sul posto, ma può diventare complicata quando si gestiscono schemi complessi con dipendenze quali vincoli di chiave esterna, vincoli di chiave primaria e trigger. Richiede anche una sincronizzazione dei dati finale tra la tabella originale e quella nuova prima del termine finale, se i dati continuano a essere modificati dalle applicazioni. Vedere l'esempio seguente per una conversione con "copia e sostituzione" della colonna MyString per le nuove regole di confronto:

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8);
    
    INSERT INTO dbo.MyTable2
    SELECT * FROM dbo.MyTable;
    
    DROP TABLE dbo.MyTable;
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • Copiare i dati in un nuovo database che usa le nuove regole di confronto e sostituire il database originale. Creare un nuovo database usando le nuove regole di confronto e trasferire i dati dal database originale tramite strumenti come Integration Services o l'Importazione/Esportazione guidata in SQL Server Management Studio. Questo è un approccio più semplice per gli schemi complessi. Richiede anche una sincronizzazione dei dati finale tra il database originale e quello nuovo prima del termine finale, se i dati continuano a essere modificati dalle applicazioni.

Limiti

  • Le regole di confronto solo Unicode di Windows possono essere usate solo con la clausola COLLATE per essere applicate ai tipi di dati nchar, nvarchar e ntext per i dati a livello di colonna e di espressione. Non è possibile utilizzarle con la clausola COLLATE per modificare le regole di confronto di un database o un'istanza del server.

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

  • È possibile specificare regole di confronto a livello di server in Istanza gestita di database SQL di Azure durante la creazione dell'istanza, ma non è possibile cambiarle in seguito. Altre informazioni in Impostare o modificare le regole di confronto del server.

Importante

L'istruzione ALTER DATABASE COLLATE non è supportata nel database SQL di Azure. Specificare le regole di confronto del database e le regole di confronto del catalogo quando si usa CREATE DATABASE.