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 AnalyticsPiattaforma di sistemi analitici (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.

Contenuto dell'argomento
Opzioni di comando per il formato nativo Unicode
Condizioni di test di esempio
 ● Tabella di esempio
 ● File di formato non XML di esempio
Esempi
 ● Uso di bcp e del formato nativo Unicode per l'esportazione di dati
 ● Uso di bcp e del formato nativo Unicode per l'importazione di dati senza un file di formato
 ● Uso di bcp e del formato nativo Unicode per l'importazione di dati con un file di formato non XML
 ● Uso di BULK INSERT e del formato nativo Unicode senza un file di formato
 ● Uso di BULK INSERT e del formato nativo Unicode con un file di formato non XML
 ● Uso di OPENROWSET e del formato nativo Unicode con un file di formato non XML
Attività correlate

Opzioni di comando per il formato nativo Unicode

È possibile importare dati in formato nativo Unicode in una tabella usando bcp, BULK INSERT o INSERT ... SELECT * FROM OPENROWSET(BULK...). Per un comando bcp o un'istruzione BULK INSERT, è possibile specificare il formato dati nell'istruzione. Per un'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) è necessario specificare il formato dati in un file di formato.

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

Comando Opzione Descrizione
bcp -N Determina l'uso del formato nativo Unicode da parte dell'utilità bcp . Questo formato usa i tipi di dati (database) nativi per tutti i dati di tipo non carattere e il formato di dati carattere Unicode per tutti i dati di tipo carattere (char, nchar, varchar, nvarchar, texte 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 File di formato per l'importazione o l'esportazione di dati (SQL Server).

Condizioni di test di esempio

Gli esempi riportati in questo argomento sono basati sulla tabella e sul file di formato definiti di seguito.

Tabella di esempio

Lo script seguente crea un database di test, una tabella denominata myWidenative e popola la tabella con alcuni valori iniziali. Eseguire l'istruzione Transact-SQL seguente in Microsoft SQL Server Management Studio (SSMS):

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 File in 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 format richiede anche l'opzione -f . Inoltre, in questo esempio il qualificatore c viene usato per specificare dati di tipo carattere e T viene usato per specificare una connessione trusted che usa 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

Verificare che il file di formato non XML termini con un ritorno a capo/avanzamento riga. 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.

Uso di bcp e del formato nativo Unicode per l'esportazione di dati

Opzione-N e comando OUT . Nota: 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

Uso di bcp e del formato nativo Unicode per l'importazione di 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

Uso di bcp e del formato nativo Unicode per l'importazione di dati con un file di formato non XML

Opzioni-N e -f switches e IN comme. 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

Uso di BULK INSERT e del formato nativo Unicode senza un file di formato

ArgomentoDATAFILETYPE . 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;

Uso di BULK INSERT e del formato nativo Unicode con un file di formato non XML

ArgomentoFORMATFILE . 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;

Uso di OPENROWSET e del formato nativo Unicode con un file di formato non XML

ArgomentoFORMATFILE . 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 formati di dati per l'importazione o l'esportazione bulk

Vedi anche

Utilità bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipi di dati (Transact-SQL)