Utilizzare il formato Unicode nativo per importare o esportare dati (SQL Server)
Si applica a: SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Analytics 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 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;
Attività correlate
Per utilizzare formati di dati per l'importazione o l'esportazione bulk
Importare dati in formato nativo e carattere da versioni precedenti di SQL Server
Usare il formato carattere per importare o esportare dati (SQL Server)
Usare il formato nativo per importare o esportare dati (SQL Server)
Usare il formato carattere Unicode per importare o esportare dati (SQL Server)
Vedi anche
Utilità bcp
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Tipi di dati (Transact-SQL)