Copia di dati tra regole di confronto diverse

Lo spostamento di dati fra colonne Unicode non richiede alcuna conversione. Per lo spostamento fra colonne contenenti dati di tipo carattere non Unicode, al contrario, è necessaria la conversione dalla tabella codici della colonna di origine alla tabella codici di quella di destinazione. Una tabella codici è un set ordinato di caratteri di un dato alfabeto, nel quale a ogni carattere è associato un indice numerico, o valore di punto di codice. Le tabelle codici supportano i set di caratteri e i layout di tastiera utilizzati da diverse impostazioni internazionali di Microsoft Windows. Per un elenco delle tabelle codici supportate, vedere Regole di confronto e architettura della tabella codici.

Per impostazione predefinita, i dati di tipo carattere vengono convertiti come illustrato di seguito:

Operazione Dati di tipo carattere convertiti in:

Esportazione

Caratteri della tabella codici OEM

Importazione

Caratteri della tabella codici ANSI/Microsoft Windows

La conversione fra tabelle codici OEM e ANSI provoca la perdita di caratteri estesi e DBCS (Double-Byte Character Set). Per evitare questo tipo di conversioni è possibile specificare una tabella codici oppure, per Microsoft SQL Server 7.0 o versioni successive, specificare una regola di confronto.

[!NOTA] Per informazioni sul trasferimento di un database da un set di regole di confronto a un altro, vedere questo sito Web Microsoft.

A partire da SQL Server 7.0, l'archiviazione fisica delle stringhe di caratteri è controllata dalle regole di confronto. Microsoft SQL Server 2005 supporta l'impostazione delle regole di confronto a quattro livelli: l'istanza del server, un database, una colonna di tabella e un'espressione. Un set di regole di confronto di SQL Server specifica tre proprietà:

  • La tabella codici utilizzata per archiviare dati di tipo carattere non Unicode.

    [!NOTA] Microsoft SQL Server 6.5 e versioni precedenti utilizzano le tabelle codici ma quest'ultime non sono archiviate in regole di confronto.

  • Il tipo di ordinamento da utilizzare per i tipi di dati Unicode nchar, nvarchar e ntext. Il tipo di ordinamento definisce la sequenza in cui vengono ordinati i caratteri e il metodo di valutazione dei caratteri nelle operazioni di confronto.

  • Il tipo di ordinamento da utilizzare per i tipi di dati carattere non Unicode char, varchar e text.

Per informazioni generali sulle tabelle codici e le regole di confronto, vedere Opzioni delle regole di confronto e supporto internazionale. Per informazioni più dettagliate, vedere Utilizzo delle regole di confronto.

Utilizzo di regole di confronto a livello di colonna

In SQL Server 7.0 e versioni successive è possibile controllare la conversione dei dati specificando le regole di confronto con le quali sono archiviati i dati nel campo del file di dati di destinazione, per un'esportazione di massa, oppure la colonna della tabella di destinazione, per un'operazione di importazione di massa. Tutte le conversioni necessarie, dalle regole di confronto del file di dati a quelle delle colonne della tabella del database, vengono eseguite internamente all'operazione di importazione o esportazione.

[!NOTA] Per controllare la conversione dei dati da una tabella codici all'altra in Microsoft SQL Server 6.0 o Microsoft SQL Server 6.5 è necessario specificare una tabella codici utilizzando nel comando un'opzione di tabella codici (opzione -C dell'utilità bcp o opzione CODEPAGE di Transact-SQL). Per ulteriori informazioni, vedere Utilizzo di una tabella codici di seguito in questo argomento. SQL Server 7.0 e versioni successive supportano la specifica di una tabella codici, ma è preferibile specificare le regole di confronto in un file di formato.

Le regole di confronto vengono sempre applicate alle colonne SQLCHAR, sia per le importazioni che per le esportazioni di massa. Le specifiche delle regole di confronto a livello di colonna vengono sempre ignorate per le colonne con un tipo di dati host diverso da SQLCHAR o SQLNCHAR. Le regole di confronto vengono utilizzate per determinare il tipo di ordinamento delle colonne SQLCHAR e SQLNCHAR durante le operazioni di importazione di massa in cui nell'hint ORDER viene fatto riferimento alle colonne.

Per specificare le regole di confronto è necessario utilizzare un file di formato. Entrambi i tipi di file di formato supportano l'impostazione di regole di confronto a livello di colonna. Per informazioni sull'utilizzo di regole di confronto in file di formato non XML vedere la sezione seguente, Impostazione di regole di confronto a livello di colonna in file di formato non XML. Per informazioni sull'utilizzo delle regole di confronto in file di formato XML, vedere Informazioni sui file di formato XML.

Impostazione di regole di confronto a livello di colonna in file di formato non XML

La colonna finale di un file di formato non XML, ovvero la colonna nella posizione ordinale 8, contiene regole di confronto che specificano le modalità di archiviazione dei dati della colonna nel file di dati. Sono disponibili le opzioni seguenti:

Opzione

Descrizione

name

Specifica il nome del set di regole di confronto utilizzato per archiviare i dati nel file di dati. Per un elenco dei nomi delle regole di confronto SQL, vedere SQL_collation_name (Transact-SQL).

RAW

Specifica che i dati vengono archiviati con la tabella codici definita in un'opzione di tabella codici nel comando o nell'hint BCPFILECP di bcp_control. Se non viene specificata alcuna opzione, per il file di dati verranno utilizzate le regole di confronto della tabella codici OEM del computer client.

ms190657.note(it-it,SQL.90).gifNota:

Per ulteriori informazioni sulle opzioni di tabella codici, vedere "Utilizzo di una tabella codici" di seguito in questo argomento. Per ulteriori informazioni sull'hint BCPFILECP, vedere bcp_control.

""

Questa impostazione ha la stessa funzione di RAW.

Esempi

Nell'esempio seguente viene illustrato un file di formato non XML con regole di confronto a livello di colonna specificate per i campi 2 e 3. Le informazioni relative alle regole di confronto sono visualizzate in grassetto.

9.0
4
1       SQLCHAR       0       7       "\t"     1     DepartmentID     ""
2       SQLCHAR       0       100     "\t"     2     Name             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     "\t"     3     GroupName        SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       24      "\r\n"   4     ModifiedDate     ""

[!NOTA] Il file di formato precedente è relativo alla tabella HumanResources.Department del database di esempio AdventureWorks, che contiene quattro colonne: DepartmentID, Name, GroupName e ModifiedDate. Per ulteriori informazioni sulla tabella, vedere Tabella Department (AdventureWorks).

Per ulteriori informazioni sui file di formato non XML, vedere Informazioni sui file di formato non XML.

Utilizzo di una tabella codici

Per controllare la conversione di dati da una tabella codici all'altra in SQL Server 6.0 o SQL Server 6.5 è necessario specificare una tabella codici nel comando.

[!NOTA] Per controllare la conversione di dati in SQL Server 7.0 e versioni successive, Microsoft consiglia di utilizzare un file di formato per specificare regole di confronto a livello di colonna per le operazioni di importazione o esportazione di massa. Per ulteriori informazioni, vedere la sezione "Utilizzo di regole di confronto a livello di colonna" più indietro in questo argomento.

La sintassi per specificare una tabella codici è la seguente:

  • Per specificare una tabella codici in un comando bcp, utilizzare l'opzione -C:
    -C { ACP | OEM | RAW | code_page }
  • Per specificare una tabella codici in un'istruzione BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...), utilizzare l'opzione CODEPAGE:
    CODEPAGE = { **'**ACP '| **'**OEM '| **'**RAW '| 'code_page' }

Sia l'opzione -C che l'opzione CODEPAGE accettano i valori di tabella codici riportati di seguito.

Valore tabella codici Descrizione

ACP

Durante un'operazione di importazione, specifica che i campi dati del tipo di dati char, varchar o text vengono convertiti dalla tabella codici ANSI/Windows (ISO 1252) alla tabella codici di SQL Server.

Durante un'operazione di esportazione, specifica che l'utilità bcp converte queste colonne dalla tabella codici di SQL Server alla tabella codici ANSI/Windows.

OEM (predefinito)

Durante un'operazione di importazione, specifica che i campi dati del tipo di dati char, varchar o text vengono convertiti dalla tabella codici OEM a quella di SQL Server.

Durante un'operazione di esportazione, specifica che l'utilità bcp converte queste colonne dalla tabella codici di SQL Server alla tabella codici OEM del sistema.

RAW

Non vengono eseguite conversioni tra tabelle codici. Si tratta dell'opzione più rapida.

code_page

Un numero di tabella codici specifico, ad esempio 850. Per un elenco delle tabelle codici supportate, vedere Regole di confronto e architettura della tabella codici.

Esempi

Negli esempi seguenti viene utilizzata la tabella HumanResources.myTeam del database AdventureWorks. Prima di eseguire gli esempi è necessario creare questa tabella. Per informazioni su come creare la tabella, vedere Creazione della tabella HumanResources.myTeam.

[!NOTA] Prima di provare l'esempio seguente è necessario eliminare le righe esistenti dalla tabella myTeam per evitare conflitti di chiave primaria.

A. Utilizzo di una tabella codici con bcp

In questo esempio viene utilizzata l'utilità bcp per l'esportazione di massa dei dati dalla tabella HumanResources.myTeam del database AdventureWorks al file di dati myTeam850.txt, utilizzando la tabella codici 850. Al prompt dei comandi di Windows digitare:

bcp AdventureWorks.HumanResources.myTeam out myTeam850.txt -c -C850 -T

B. Utilizzo di una tabella codici con BULK INSERT

In questo esempio viene utilizzata l'istruzione BULK INSERT per l'importazione di massa di myTeam850.txt, creato nel precedente esempio con l'utilità bcp, nella tabella HumanResources.myTeam di AdventureWorks.

Da uno strumento per le query, come l'editor di query di SQL Server Management Studio, eseguire:

USE AdventureWorks
GO
DELETE HumanResources.myTeam
GO
BULK INSERT HumanResources.myTeam 
   FROM 'C:\myTeam850.txt'
   WITH (CODEPAGE = 850);
GO

Esportazione di massa di dati tra regole di confronto diverse

In un'operazione di esportazione di massa, le regole di confronto specificate controllano la tabella codici utilizzata per archiviare i dati di tipo carattere nel file di dati. Le regole vengono applicate a:

  • Tutte le colonne di un file di dati in formato carattere.
  • Tutte le colonne di un file in modalità nativa nelle quali SQLCHAR è specificato come tipo di dati del file host.
  • Tutti i caratteri SQLCHAR i cui valori sono maggiori di 127 o minori di 32.
    L'applicazione di regole di confronto diverse non ha alcun effetto sui caratteri i cui valori sono compresi tra 32 e 127 in quanto, sebbene le regole vengano applicate anche a questi, tutte le tabelle codici mappano gli stessi caratteri ai valori compresi tra 32 e 127.

Le regole per determinare il set di regole di confronto o la tabella codici da utilizzare in un'operazione di esportazione di massa sono le seguenti:

  • Se vengono specificate regole di confronto a livello di colonna in un file di formato o utilizzando la funzione ODBC bcp_setcolfmt (bcp_setcolfmt), i dati di tipo carattere vengono archiviati utilizzando la tabella codici ANSI associata a tali regole.

  • Se non sono state impostate regole di confronto a livello di colonna, ma è stata specificata una tabella codici mediante un'opzione di tabella codici nel comando o l'hint BCPFILECP di bcp_control, tutti i dati SQLCHAR delle colonne per le quali non sono state specificate regole di confronto vengono archiviati utilizzando la tabella codici specificata.

    [!NOTA] Per informazioni sulle opzioni di tabella codici, vedere Utilizzo di una tabella codici più indietro in questo argomento. Per ulteriori informazioni sull'hint BCPFILECP, vedere bcp_control.

  • Se non si specificano regole di confronto o una tabella codici, i dati SQLCHAR vengono archiviati utilizzando la tabella codici OEM del computer client.

[!NOTA] Nei file di dati non vengono archiviate informazioni relative alle regole di confronto o alla tabella codici.

Importazione di massa di dati tra regole di confronto diverse

Quando viene eseguita un'operazione di importazione di massa, l'interpretazione della tabella codici riguarda soltanto le colonne archiviate come dati in formato carattere, SQLCHAR, in un file di dati. In un file di dati in formato carattere tutte le colonne vengono archiviate come SQLCHAR. Poiché nei file di dati non vengono archiviate informazioni relative alle regole di confronto o alla tabella codici, per un'operazione di importazione di massa è necessario fornire tali informazioni per i campi dati.

Le regole per determinare il set di regole di confronto o la tabella codici da utilizzare in un'operazione di importazione di massa sono le seguenti:

  • Se vengono specificate regole di confronto a livello di colonna in un file di formato o utilizzando la funzione bcp_setcolfmt di ODBC (bcp_setcolfmt), i dati SQLCHAR di un file di dati vengono interpretati in base alla tabella codici ANSI associata alle regole specificate. Assicurarsi che le regole di confronto impostate corrispondano a quelle presenti nel file di dati.

  • Se non vengono specificate regole di confronto a livello di colonna, ma viene specificata una tabella codici utilizzando l'opzione di tabella codici nel comando o l'hint BCPFILECP di bcp_control, i dati SQLCHAR vengono interpretati in base alla tabella codici specificata.

    [!NOTA] Per ulteriori informazioni sulle opzioni di tabella codici, vedere Utilizzo di una tabella codici più indietro in questo argomento. Per ulteriori informazioni sull'hint BCPFILECP, vedere bcp_control.

  • Se non si specificano regole di confronto o una tabella codici, i dati nelle colonne SQLCHAR vengono interpretati utilizzando la tabella codici OEM del computer client.

Quando viene eseguita un'operazione di importazione di massa, le impostazioni delle regole di confronto consentono di controllare:

  • L'interpretazione della tabella codici delle colonne SQLCHAR nel file di dati.
  • L'applicazione dell'hint ORDER da parte di bcp o BULK INSERT, se specificato.
    Se si utilizza l'hint ORDER, nell'operazione di importazione di massa le regole di confronto consentono la corretta interpretazione dell'hint. L'hint viene applicato alle colonne SQLCHAR e SQLNCHAR. La sequenza dei dati nelle colonne a cui fa riferimento un hint ORDER deve corrispondere a quella definita dalle regole di confronto assegnate a tali colonne. Per ulteriori informazioni, vedere Controllo dell'ordinamento durante l'importazione di massa di dati.

Vedere anche

Concetti

Utilizzo del formato carattere Unicode per l'importazione o l'esportazione di dati
Utilizzo del formato Unicode nativo per importare o esportare dati
Utilizzo delle regole di confronto

Altre risorse

bcp_control
Utilità bcp
bcp_setcolfmt
BULK INSERT (Transact-SQL)
File di formato per l'importazione o l'esportazione di dati
Considerazioni sul supporto internazionale per database e applicazioni di Motore di database
OPENROWSET (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005