Condividi tramite


Specificare i caratteri di terminazione dei campi e delle righe (SQL Server)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)Endpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft Fabric

Per i campi dati di tipo carattere è facoltativamente possibile contrassegnare la fine di ogni campo di un file di dati con un carattere di terminazione del campo a e la fine di ogni riga con un carattere di terminazione della riga. I caratteri di terminazione costituiscono un mezzo per indicare ai programmi che leggono il file di dati dove termina un campo o una riga e dove inizia un altro campo o un'altra riga.

Important

Per il formato nativo o il formato Unicode nativo, utilizzare i prefissi di lunghezza anziché i caratteri di terminazione del campo. È possibile che si verifichino conflitti tra i caratteri di terminazione e i dati in formato nativo, in quanto per i file di dati in formato nativo viene usato il formato binario interno di Microsoft SQL Server.

Caratteri supportati come caratteri di terminazione

Il comando bcp, BULK INSERT l'istruzione e il provider bulk per set di righe OPENROWSET supportano vari caratteri come delimitatori di campo o di riga e cercano sempre la prima istanza di ciascun delimitatore. Nella tabella seguente sono inclusi i caratteri di terminazione supportati.

Terminating character Indicated by Description
Tab \t Questo è il carattere di terminazione del campo predefinito.
Newline character \n Questo è il carattere di terminazione della riga predefinito.
Ritorno a capo/Avanzamento di riga \r
Backslash 1 \
Carattere di terminazione Null (terminatore non visibile) 2 \0
Qualsiasi carattere stampabile (i caratteri di controllo non sono stampabili, ad eccezione di valore nullo, tabulazioni, nuova linea e ritorno a capo) (*, A, tl, e così via)
Stringa costituita da un massimo di 10 caratteri stampabili, inclusi alcuni o tutti i caratteri di terminazione descritti sopra (**\t**, end, !!!!!!!!!!\t-\n, e così via)

1 Solo i caratteri t, n, r, 0 e \0 funzionano con il carattere di escape della barra rovesciata per produrre un carattere di controllo.

2 Anche se il carattere di controllo Null (\0) non è visibile quando viene stampato, si tratta di un carattere distinto nel file di dati. Pertanto, l'utilizzo di un carattere di controllo Null come carattere di terminazione è diverso dall'assenza di qualsiasi carattere di terminazione del campo o della riga.

Important

Se all'interno dei dati si verifica un carattere di terminazione, il carattere viene interpretato come carattere di terminazione, non come dati e i dati dopo tale carattere sono interpretati come appartenenti al campo o al record successivo. Di conseguenza, scegli attentamente i tuoi terminatori per garantire che non compaiano mai nei tuoi dati. Ad esempio, un terminatore di campo surrogato basso non è una scelta ottimale per un terminatore di campo se i dati contengono tale surrogato basso.

Usare i caratteri di terminazione di riga

Il carattere di terminazione della riga può essere identico al carattere di terminazione dell'ultimo campo. In genere, tuttavia, è consigliabile utilizzare un carattere di terminazione della riga distinto. Ad esempio, per produrre un output tabulare, terminare l'ultimo campo in ogni riga con il carattere di nuova riga (\n) e tutti gli altri campi con il carattere di tabulazione (\t). Per inserire ogni record di dati nella propria riga nel file di dati, specificare la combinazione \r\n come terminatore di riga.

Note

Quando si usa bcp in modo interattivo e si specifica \n (nuova riga) come terminatore di riga, bcp lo antepone automaticamente con un carattere \r (ritorno a capo), risultando in un terminatore di riga di \r\n.

Specificare i caratteri di terminazione per l'esportazione in blocco

Se si esegue l'esportazione bulk di dati char o nchar e si vuole usare un carattere di terminazione non predefinito, è necessario specificare tale carattere nel comando bcp . È possibile specificare i caratteri di terminazione in uno dei modi seguenti:

  • Con un file di formato che specifica il carattere di terminazione per ogni singolo campo.

  • Senza un file di formato, esistono le seguenti alternative:

    • Utilizzare l'opzione -t per specificare il carattere di terminazione del campo per tutti i campi tranne l'ultimo campo della riga e l'opzione -r per specificare un carattere di terminazione di riga.

    • Usare un interruttore di formato carattere (-c o -w) senza l'interruttore -t, che imposta il carattere di terminazione del campo sul carattere di tabulazione, \t. Si tratta dello stesso tipo di specificare -t\t.

      Note

      Se si specifica l'opzione -n (dati nativi) o -N (nativa Unicode), i caratteri di terminazione non vengono inseriti.

    • Se un comando bcp interattivo contiene l'opzione in o out senza l'opzione del file di formato (-f) o un'opzione di formato dati (-n, -c, -w, o -N) e si sceglie di non specificare la lunghezza del prefisso e la lunghezza del campo, il comando richiede l'indicazione del terminatore di campo per ciascun campo, con un valore predefinito "none":

      Enter field terminator [none]:

      In genere, l'impostazione predefinita rappresenta una scelta appropriata. Tuttavia, per i campi dati char o nchar, vedere la sottosezione seguente, "Linee guida per l'uso dei caratteri di terminazione". Per un esempio che mostra questo prompt nel contesto, vedere Specificare i formati di dati di compatibilità quando si usa bcp (SQL Server).

      Note

      Dopo l'impostazione interattiva di tutti i campi in un comando bcp, viene richiesto di salvare le risposte relative a ogni campo in un file di formato non XML. Per altre informazioni sui file di formato non XML, vedere Usare file di formato non XML (SQL Server).

Linee guida per l'uso dei caratteri di terminazione

In alcuni casi, un carattere di terminazione può essere utile per un campo dati char o nchar . For example:

  • Per una colonna di dati contenente un valore Null in un file di dati che verrà importato in un programma che non riconosce le informazioni sulla lunghezza del prefisso.

    Qualsiasi colonna di dati che contiene un valore null è considerata a lunghezza variabile. In assenza di lunghezze dei prefissi, un carattere di terminazione è necessario per identificare la fine di un campo null, in modo da garantire la corretta interpretazione dei dati.

  • Per una colonna a lunghezza fissa lunga il cui spazio è utilizzato solo parzialmente da molte righe.

    In questa situazione, la definizione di un carattere di terminazione può ridurre lo spazio di archiviazione, facendo sì che il campo venga considerato un campo a lunghezza variabile.

Specificare \n come terminatore di riga per l'esportazione in blocco

Quando si specifica \n come carattere di terminazione di riga per l'esportazione bulk o si usa in modo implicito il terminatore di riga predefinito, bcp restituisce una combinazione di ritorno a capo-avanzamento riga (CRLF) come carattere di terminazione di riga. Se si vuole usare solo un carattere di avanzamento riga (LF) come terminazione di riga - come avviene in genere nei computer Unix e Linux - specificare il carattere LF usando la notazione esadecimale. For example:

bcp -r '0x0A'

Examples

In questo esempio viene eseguita l'esportazione bulk dei dati dalla tabella AdventureWorks2022.HumanResources.Department al file di dati Department-c-t.txt usando il formato carattere con la virgola come carattere di terminazione del campo e il carattere di nuova riga (\n) come terminazione di riga.

Per il comando bcp sono disponibili le opzioni seguenti.

Switch Description
-c Specifica che i campi dati devono essere caricati come caratteri.
-t , Specifica la virgola (,) come carattere di terminazione del campo.
-r \n Specifica il carattere di nuova riga come carattere di terminazione della riga. Si tratta del carattere di terminazione di riga predefinito, quindi è facoltativo.
-T Specifica che l'utilità bcp si connette a SQL Server con una connessione trusted che usa la sicurezza integrata. Se -T non è specificato, è necessario specificare -U e -P accedere correttamente.

Per altre informazioni, vedere bcp Utility.

Al prompt dei comandi di Microsoft Windows immettere:

bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

In questo modo viene creato il file di dati Department-c-t.txtcontenente 16 record, ognuno con quattro campi. I campi sono separati da una virgola.

Specificare i caratteri di terminazione per l'importazione in massa

Quando si esegue l'importazione bulk di dati char o nchar , il relativo comando deve riconoscere i caratteri di terminazione usati nel file di dati. La specifica dei terminatori dipende dal comando per l'importazione in blocco, come segue.

  • bcp

    Per impostare i caratteri di terminazione per un'operazione di importazione, è possibile utilizzare la stessa sintassi utilizzata per un'operazione di esportazione. Per altre informazioni, vedere Specificare i caratteri di terminazione per l'esportazione in blocco, in precedenza in questo articolo.

  • BULK INSERT

    I caratteri di terminazione si possono specificare per i singoli campi in un file di formato o per l'intero file di dati, usando i qualificatori riportati nella tabella sottostante.

    Qualifier Description
    FIELDTERMINATOR = '<field_terminator>' Specifica il carattere di terminazione del campo da utilizzare per i file di dati di tipo carattere e carattere Unicode.

    Il valore predefinito è \t (carattere di tabulazione).
    ROWTERMINATOR = '<row_terminator>' Specifica il carattere di terminazione della riga da utilizzare per i file di dati di tipo carattere e carattere Unicode.

    Il valore predefinito è \n (carattere di nuova riga).

    Per altre informazioni, vedere BULK INSERT.

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    Per il OPENROWSET provider di set di righe bulk, i caratteri di terminazione possono essere specificati solo nel file di formato (che è obbligatorio tranne per i tipi di dati di grandi dimensioni). Se un file di dati di tipo carattere utilizza un carattere di terminazione non predefinito, è necessario definire tale carattere nel file di formato. Per altre informazioni, vedere Creazione di un file di formato (SQL Server) e Utilizzo di un file di formato per l'importazione bulk dei dati (SQL Server).

    Per ulteriori informazioni sulla clausola OPENROWSET BULK, vedere OPENROWSET (BULK).

Specificare \n come terminatore di riga per l'importazione massiva

Quando si specifica \n come terminatore di riga per l'importazione massiva o si usa in modo implicito il terminatore di riga predefinito, bcp e l'istruzione BULK INSERT prevedono una combinazione di ritorno a capo e avanzamento riga (CRLF) come terminatore di riga. Se il file di origine utilizza solo un carattere di avanzamento riga (LF) come terminatore di riga, come avviene generalmente nei file generati su computer Unix e Linux, utilizzare la notazione esadecimale per specificare il terminatore di riga LF. Ad esempio, in una dichiarazione BULK INSERT :

ROWTERMINATOR = '0x0A'

Examples

Negli esempi di questa sezione viene eseguita l'importazione bulk di dati di tipo carattere dal file dei dati Department-c-t.txt creato nell'esempio precedente nella tabella myDepartment del database di esempio AdventureWorks2022 . Prima di eseguire le procedure illustrate negli esempi, è necessario creare la tabella. Per creare questa tabella nello schema, nell'editor dbo di query di SQL Server Management Studio eseguire il codice seguente:

USE AdventureWorks2022;
GO

DROP TABLE myDepartment;

CREATE TABLE myDepartment
(
    DepartmentID SMALLINT,
    Name NVARCHAR (50),
    GroupName NVARCHAR (50) NULL,
    ModifiedDate DATETIME CONSTRAINT
        DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO

A. Utilizzo del comando bcp per l'impostazione interattiva dei caratteri di terminazione

Nell'esempio seguente viene eseguita l'importazione bulk del file di dati Department-c-t.txt utilizzando un comando bcp . Questo comando utilizza le stesse opzioni del comando di esportazione in blocco. Per altre informazioni, vedere Specificare i caratteri di terminazione per l'esportazione in blocco, in precedenza in questo articolo.

Al prompt dei comandi di Windows digitare il comando seguente:

bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B. Utilizza BULK INSERT per specificare interattivamente i terminatori.

Nell'esempio seguente viene eseguita l'importazione bulk del file di dati Department-c-t.txt utilizzando un'istruzione BULK INSERT con i qualificatori illustrati nella tabella seguente:

Option Attribute
DATAFILETYPE = 'char' Specifica che i campi dati devono essere caricati come caratteri.
FIELDTERMINATOR = ',' Specifica la virgola (,) come carattere di terminazione del campo.
ROWTERMINATOR = '\n' Specifica il carattere di nuova riga come carattere di terminazione della riga.

Nell'editor di query di SQL Server Management Studio, eseguire il codice seguente:

USE AdventureWorks2022;
GO

BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
     DATAFILETYPE = 'char',
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n'
);
GO