Impostazione dei caratteri di terminazione del campo e della riga

Per i campi dati di tipo carattere è possibile contrassegnare la fine di ogni campo di un file di dati con un carattere di terminazione del campo 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.

Nota importanteImportante

Per il formato nativo o nativo Unicode, utilizzare i prefissi di lunghezza anziché i caratteri di terminazione del campo. Possono verificarsi conflitti tra i dati in formato nativo e i caratteri di terminazione, in quanto un file di dati in formato nativo viene archiviato nel formato di dati binario interno di Microsoft SQL Server.

Caratteri supportati come caratteri di terminazione

Il comando bcp, l'istruzione BULK INSERT e il provider di set di righe con lettura bulk OPENROWSET supportano una vasta gamma di caratteri di terminazione del campo o della riga e cercano sempre la prima istanza di ogni carattere di terminazione. Nella tabella seguente sono inclusi i caratteri di terminazione supportati.

Carattere di terminazione

Indicato da

Tabulazione

\t

Questo è il carattere di terminazione del campo predefinito.

Carattere di nuova riga

\n

Questo è il carattere di terminazione della riga predefinito.

Ritorno a capo/avanzamento riga

\r

Barra rovesciata1

\\

Carattere di terminazione Null (non visibile)2

\0

Tutti i caratteri stampabili (i caratteri di controllo non sono stampabili, ad eccezione dei caratteri Null, di tabulazione, di nuova riga e di ritorno a capo)

(*, A, t, l 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 Per generare un carattere di controllo, è possibile utilizzare solo i caratteri t, n, r, 0 e '\0' in associazione al carattere di escape barra rovesciata.

2 Anche se il carattere di controllo Null (\0) non è visibile quando viene stampato, è un carattere distinto del 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.

Nota importanteImportante

Se i dati contengono un carattere di terminazione, questo viene interpretato come tale e non come un'informazione, mentre i dati che seguono tale carattere vengono interpretati come parte del campo o del record successivo. Di conseguenza, è necessario scegliere con attenzione i caratteri di terminazione per evitare che vengano visualizzati nei dati.

Utilizzo dei caratteri di terminazione della 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. Per generare un output in formato tabulare, ad esempio, è possibile terminare l'ultimo campo di ogni riga con il carattere di nuova riga (\n) e tutti gli altri campi con il carattere di tabulazione (\t). Per posizionare ogni record di dati sulla propria riga nel file di dati, specificare la combinazione \r\n come carattere di terminazione della riga.

Nota

Se si utilizza bcp in modalità interattiva e si specifica il carattere di nuova riga \n come carattere di terminazione della riga, il comando bcp aggiunge automaticamente il carattere di ritorno a capo \r come prefisso, generando il carattere di terminazione della riga \r\n.

Impostazione dei caratteri di terminazione per l'esportazione bulk

Se si esegue l'esportazione bulk di dati char o nchar e si desidera utilizzare 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.

    Nota

    Per ulteriori informazioni sull'utilizzo di file di formato, vedere File di formato per l'importazione o l'esportazione di dati.

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

    • Utilizzo dell'opzione -t per specificare il carattere di terminazione della riga per tutti i campi, ad eccezione dell'ultimo campo della riga, e dell'opzione -r per specificare un carattere di terminazione della riga.

    • Utilizzo di un'opzione per il formato carattere (-c o -w) senza l'opzione -t, che imposta il carattere di terminazione del campo sul carattere di tabulazione, \t. L'espressione equivale a specificare -t\t.

      Nota

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

    • Se un comando bcp interattivo include l'opzione in o out senza l'opzione per il file di formato (-f) o per un formato di dati (-n, -c, -w o -N) e si è scelto di non specificare la lunghezza del prefisso e del campo, il comando richiede di specificare il carattere di terminazione di ogni campo. L'impostazione predefinita none non prevede alcun carattere di terminazione:

      Enter field terminator [none]:

      In genere, l'impostazione predefinita rappresenta una scelta appropriata. Per i campi che includono dati char o nchar, tuttavia, vedere la sottosezione seguente "Linee guida per l'utilizzo dei caratteri di terminazione". Per un esempio contestualizzato di tale richiesta, vedere Impostazione dei formati di dati per la compatibilità mediante bcp.

      Nota

      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 ulteriori informazioni sui file di formato non XML, vedere Informazioni sui file di formato non XML.

Linee guida per l'utilizzo dei caratteri di terminazione

In alcuni casi, un carattere di terminazione può essere utile per un campo che contiene dati char o nchar. Ad esempio:

  • Una colonna di dati che contiene un valore Null in un file di dati che verrà importato in un programma che non è in grado di interpretare le informazioni sulla lunghezza del prefisso.

    Qualsiasi colonna di dati che contiene un valore Null viene considerata a lunghezza variabile. In assenza di lunghezze di prefisso, un carattere di terminazione è necessario per identificare la fine di un campo Null, in modo da assicurarsi che i dati vengano interpretati correttamente.

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

    In questa situazione, l'indicazione di un carattere di terminazione può ridurre al minimo lo spazio di archiviazione in modo che il campo possa essere considerato come campo a lunghezza variabile. Per ulteriori informazioni sull'interrelazione tra lunghezza del prefisso, lunghezza del campo e caratteri di terminazione relativamente all'archiviazione di dati char, vedere Archiviazione di dati in formato carattere.

Esempi

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

Per il comando bcp sono disponibili le opzioni seguenti.

Opzione

Descrizione

-c

Specifica che i campi dati devono essere caricati come dati di tipo carattere.

-t,

Specifica la virgola (,) come carattere di terminazione del campo.

-r \n

Specifica il carattere di nuova riga come carattere di terminazione della riga. Questo è il carattere di terminazione della riga predefinito e, pertanto, la relativa impostazione è facoltativa.

-T

Specifica che l'utilità bcp si connette a SQL Server con una connessione trusted utilizzando la sicurezza integrata. Se si omette -T, è necessario specificare -U e -P per eseguire correttamente l'accesso.

Per ulteriori informazioni, vedere Utilità bcp.

Al prompt dei comandi di Microsoft Windows digitare:

bcp AdventureWorks2008R2.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.txt contenente 16 record, ognuno con quattro campi. I campi sono separati da una virgola.

Impostazione dei caratteri di terminazione per l'importazione bulk

Quando si esegue l'importazione bulk di dati char o nchar, il relativo comando deve riconoscere i caratteri di terminazione utilizzati nel file di dati. L'impostazione dei caratteri di terminazione varia in base al comando per l'importazione bulk, come illustrato di seguito:

  • bcp

    L'indicazione di caratteri di terminazione per un'importazione comporta l'utilizzo della stessa sintassi di un'operazione di esportazione. Per ulteriori informazioni, vedere "Impostazione dei caratteri di terminazione per l'esportazione bulk" più indietro in questo argomento.

  • BULK INSERT

    È possibile specificare i caratteri di terminazione per i singoli campi di un file di formato o per l'intero file di dati utilizzando i qualificatori illustrati nella tabella seguente:

    Qualificatore

    Descrizione

    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 è il carattere di tabulazione (\t).

    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 è il carattere di nuova riga (\n).

    Per ulteriori informazioni, vedere BULK INSERT (Transact-SQL).

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

    Per il provider di set di righe con lettura bulk OPENROWSET, è possibile specificare i caratteri di terminazione solo nel file di formato, ad eccezione dei tipi di dati contenenti oggetti 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 ulteriori informazioni, vedere Creazione di un file di formato e Utilizzo di un file di formato per l'importazione bulk dei dati.

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

Esempi

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 AdventureWorks2008R2. Prima di eseguire le procedure illustrate negli esempi, è necessario creare la tabella. Per crearla in base allo schema dbo, nell'editor di query di SQL Server Management Studio eseguire il codice seguente:

USE AdventureWorks2008R2;
GO
DROP TABLE myDepartment;
CREATE TABLE myDepartment 
(DepartmentID smallint,
Name nvarchar(50),
GroupName nvarchar(50) NULL,
ModifiedDate datetime not NULL CONSTRAINT DF_AddressType_ModifiedDate DEFAULT (GETDATE())
);
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. Per questo comando sono disponibili le stesse opzioni del comando di esportazione bulk. Per ulteriori informazioni, vedere "Impostazione dei caratteri di terminazione per l'esportazione bulk", più indietro in questo argomento.

Al prompt dei comandi di Windows digitare:

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

B. Utilizzo dell'istruzione BULK INSERT 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'istruzione BULK INSERT con i qualificatori illustrati nella tabella seguente:

Opzione

Attributo

DATAFILETYPE ='char'

Specifica che i campi dati devono essere caricati come dati di tipo carattere.

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 AdventureWorks2008R2;
GO
BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
   WITH (
      DATAFILETYPE = 'char',
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n'
);
GO