Condividi tramite


Utilizzare il formato Unicode nativo per importare o esportare dati (SQL Server)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

Il formato Unicode nativo risulta particolarmente utile quando è necessario copiare informazioni da un'installazione di Microsoft SQL Server a un'altra. L'utilizzo del formato nativo per i dati non carattere consente di risparmiare tempo evitando di dover eseguire la conversione dei tipi di dati in formato carattere e viceversa. L'utilizzo del formato carattere Unicode per tutti i dati di tipo carattere consente di evitare la perdita dei caratteri estesi durante il trasferimento bulk dei dati tra server che utilizzano tabelle codici diverse. Un file di dati in formato nativo Unicode è leggibile con qualsiasi metodo di importazione bulk.

Il formato nativo Unicode è consigliato per i trasferimenti bulk di dati tra più istanze di SQL Server utilizzando un file di dati che include caratteri estesi o DBCS. Per i dati non carattere, il formato nativo Unicode utilizza i tipi di dati (database) nativi. Per i dati di tipo carattere quali char, nchar, varchar, nvarchar, text, varchar(max), nvarchar(max)e ntextil formato nativo Unicode usa il formato di dati di tipo carattere Unicode.

I dati sql_variant memorizzati come SQLVARIANT in un file di dati in formato nativo Unicode vengono gestiti in modo analogo a quanto avviene per un file di dati in formato nativo, fatta eccezione per il fatto che i valori char e varchar vengono convertiti in nchar e nvarchar, raddoppiando lo spazio necessario per le colonne interessate. I metadati originali vengono mantenuti e i valori riconvertiti nel tipo di dati char e varchar originale quando viene eseguita l'importazione in blocco in una colonna di tabella.

Opzioni di comando per il formato nativo Unicode

È possibile importare dati in formato nativo Unicode in una tabella usando bcp, BULK INSERT o OPENROWSET BULK.

  • Per un comando bcp o un'istruzione BULK INSERT , è possibile specificare il formato di dati nell'istruzione .
  • Per un'istruzione OPENROWSET BULK , è necessario specificare il formato di dati in un file di formato.

Il formato nativo Unicode è supportato dalle opzioni di comando seguenti:

Comando Opzione Descrizione
bcp -N Fa sì che l'utilità bcp usi il formato nativo Unicode, che usa tipi di dati nativi (database) per tutti i dati non carattere e il formato di dati carattere Unicode per tutti i dati carattere (char, nchar, varchar, nvarchar, text e ntext).
BULK INSERT DATAFILETYPE ='widenative' Usa il formato nativo Unicode per l'importazione bulk dei dati.
OPENROWSET N/D Deve usare un file di formato

Nota

In alternativa, è possibile definire la formattazione di ogni singolo campo in un file di formato. Per altre informazioni, vedere Formattare i file per importare ed esportare i dati (SQL Server).

Condizioni di test di esempio

Gli esempi in questo argomento si basano sulla tabella myWidenative di esempio e sul file myWidenative.fmtdi formato . Sostituire i percorsi dei file locali con un percorso di file locale nel sistema.

Tabella di esempio

Lo script seguente crea un database di test, una tabella denominata myWidenative e popola la tabella con alcuni valori iniziali. Eseguire il codice Transact-SQL seguente:

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myWidenative ( 
    PersonID smallint NOT NULL,
    FirstName nvarchar(25) NOT NULL,
    LastName nvarchar(30) NOT NULL,
    BirthDate date,
    AnnualSalary money
);

-- Populate table
INSERT TestDatabase.dbo.myWidenative
VALUES (1, N'ϴAnthony', N'Grosse', '02-23-1980', 65000.00),
       (2, N'❤Alica', N'Fatnowna', '11-14-1963', 45000.00),
       (3, N'☎Stella', N'Rossenhain', '03-02-1992', 120000.00);

-- Review Data
SELECT * FROM TestDatabase.dbo.myWidenative;

File di formato non XML di esempio

SQL Server supporta due tipi di file di formato, ovvero non XML e XML. Il formato non XML è il formato originale supportato dalle versioni precedenti di SQL Server. Per informazioni dettagliate, vedere Usare file di formato non XML (SQL Server ). Il comando seguente userà l' utility bcp per generare un formato di file non XML, myWidenative.fmt, sulla base dello schema di myWidenative.

  • Per usare un comando bcp per creare un file di formato, specificare l'argomento format e usare nul anziché un percorso del file di dati.
  • L'opzione di formattazione richiede anche l'opzione -f.
  • c è utilizzato per specificare dati di carattere
  • T viene usato per specificare una connessione attendibile tramite la sicurezza integrata.

Al prompt dei comandi immettere i comandi seguenti:

bcp TestDatabase.dbo.myWidenative format nul -f D:\BCP\myWidenative.fmt -T -N

REM Review file
Notepad D:\BCP\myWidenative.fmt

Importante

Assicurati che il file di formato non XML termini con un invio/linea nuova. In caso contrario, è possibile che venga visualizzato il messaggio di errore seguente:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Esempi

Gli esempi seguenti usano il database e i file di formato creati in precedenza.

Usare bcp e il formato nativo Unicode per esportare i dati

Opzione -N e comando OUT.

Il file di dati creato in questo esempio verrà usato in tutti gli esempi successivi.

Al prompt dei comandi immettere i comandi seguenti:

bcp TestDatabase.dbo.myWidenative OUT D:\BCP\myWidenative.bcp -T -N

REM Review results
NOTEPAD D:\BCP\myWidenative.bcp

Usare bcp e il formato nativo Unicode per importare dati senza un file di formato

Opzione -N e comando IN.

Al prompt dei comandi immettere i comandi seguenti:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidenative;"

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -T -N

REM Review results is SSMS

Usare bcp e il formato nativo Unicode per importare dati con un file di formato non XML

Gli interruttori -N e -f e il comando IN.

Al prompt dei comandi immettere i comandi seguenti:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myWidenative;"

REM Import data
bcp TestDatabase.dbo.myWidenative IN D:\BCP\myWidenative.bcp -f D:\BCP\myWidenative.fmt -T -N

REM Review results is SSMS

Usare BULK INSERT e il formato nativo Unicode senza un file di formato

Argomento DATAFILETYPE.

Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
    FROM 'D:\BCP\myWidenative.bcp'
    WITH (DATAFILETYPE = 'widenative' );

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

Usare BULK INSERT e il formato nativo Unicode con un file di formato non XML

Argomento FORMATFILE.

Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

BULK INSERT TestDatabase.dbo.myWidenative
   FROM 'D:\BCP\myWidenative.bcp'
   WITH ( FORMATFILE = 'D:\BCP\myWidenative.fmt'  );

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

Usare OPENROWSET e il formato nativo Unicode con un file di formato non XML

Argomento FORMATFILE.

Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

TRUNCATE TABLE TestDatabase.dbo.myWidenative; -- for testing

INSERT INTO TestDatabase.dbo.myWidenative
SELECT * FROM OPENROWSET (
    BULK 'D:\BCP\myWidenative.bcp',
    FORMATFILE = 'D:\BCP\myWidenative.fmt'
) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myWidenative;

Per utilizzare i formati dati per l'importazione o l'esportazione in blocco: