Condividi tramite


Specificare la lunghezza del campo usando bcp (SQL Server)

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

La lunghezza del campo indica il numero massimo di caratteri necessari per rappresentare i dati in formato carattere. Se i dati sono archiviati in formato nativo, la lunghezza di campo è già nota. Ad esempio, il tipo di dati int accetta 4 byte. Se si è indicato 0 come lunghezza del prefisso, il comando bcp chiede di specificare la lunghezza del campo, le lunghezze di campo predefinite e l'impatto della lunghezza del campo sull'archiviazione dei dati in file di dati contenenti dati char .

Richiesta di bcp per la lunghezza del campo

Se un comando interattivo bcp contiene l'opzione in o out senza né l'opzione di file di formato (-f) né un'opzione di formato dati (-n, -c, -w, o -N), il comando richiede la lunghezza di ciascun campo dati, come segue:

Enter length of field <field_name> [<default>]:

Per un esempio contestualizzato di tale richiesta, vedere Impostazione dei formati di dati per la compatibilità mediante bcp (SQL Server).

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 altre informazioni sui file di formato non XML, vedere File in formato non XML (SQL Server).

La richiesta o meno della lunghezza del campo da parte del comando bcp dipende da diversi fattori, ad esempio:

  • Quando si copiano tipi di dati che non hanno lunghezza fissa e si specifica una lunghezza del prefisso pari a 0, bcp richiede una lunghezza di campo.

  • Quando si convertono i dati di tipo non carattere in dati di tipo carattere, bcp suggerisce una lunghezza del campo predefinita sufficiente per archiviare i dati.

  • Se il tipo di archiviazione di file non è carattere, il comando bcp non richiede una lunghezza del campo. I dati vengono archiviati usando il tipo di rappresentazione nativo di Microsoft SQL Server (formato nativo).

Usa lunghezze di campo predefinite

In genere, Microsoft consiglia di accettare i valori predefiniti per la lunghezza del campo proposti da bcp. Quando viene creato un file di dati in modalità carattere, l'uso della lunghezza predefinita del campo garantisce che i dati non vengano troncati e che non si verifichino errori di overflow numerici.

Se si specifica una lunghezza di campo non valida, è possibile che si verifichino errori. Ad esempio, se si copiano dati numerici e si specifica una lunghezza di campo troppo breve per i dati, l'utilità bcp stampa un messaggio di overflow e non copia i dati. Se inoltre si esportano dati datetime e si specifica una lunghezza di campo inferiore a 26 byte per la stringa di caratteri, l'utilità bcp tronca i dati, senza visualizzare alcun messaggio di errore.

Importante

Se si utilizza l'opzione predefinita per la dimensione, SQL Server prevede di leggere una stringa intera. In alcuni casi, l'utilizzo di una lunghezza di campo predefinita può provocare un errore di tipo "Fine del file imprevista". In genere, questo errore si verifica con i tipi di dati money e datetime , quando solo parte del campo previsto è disponibile nel file di dati, ad esempio quando si specifica un valore datetime pari a mm/dd/yy senza specificare il componente relativo all'ora e tale valore risulta quindi inferiore rispetto alla lunghezza prevista di 24 caratteri per un valore datetime nel formato char . Per evitare tale tipo di errore, utilizzare caratteri di terminazione del campo o campi dati di lunghezza fissa oppure modificare la lunghezza di campo predefinita, specificando un valore diverso.

Lunghezze predefinite dei campi per l'archiviazione dei file di caratteri

Nella tabella seguente vengono elencate le lunghezze di campo predefinite per i dati da archiviare come tipo di archiviazione file di caratteri. I dati nullable hanno la stessa lunghezza dei dati non nullable.

Tipo di dati Lunghezza predefinita (caratteri)
char Lunghezza definita per la colonna
varchar Lunghezza definita per la colonna
nchar Due volte la lunghezza definita per la colonna
nvarchar Due volte la lunghezza definita per la colonna
Text 0
ntext 0
bit 1
binary Due volte la lunghezza definita per la colonna + 1
varbinary Due volte la lunghezza definita per la colonna + 1
Immagine 0
datetime 24
smalldatetime 24
float 30
real 30
int 12
bigint 19
smallint 7
tinyint 5
money 30
smallmoney 30
decimal 41 1
numeric 41 1
uniqueidentifier 37
timestamp 17
varchar(max) 0
varbinary(max) 0
nvarchar(max) 0
UDT Lunghezza della colonna del termine definito dall'utente (UDT)
XML 0
vector Non disponibile 2

1 Per altre informazioni sui tipi di dati decimali e numerici , vedere Decimal e numeric (Transact-SQL).

2 La conversione del tipo di dati vector da e verso il carattere non è consentita.

Nota

Una colonna di tipo tinyint può contenere valori compresi tra 0 e 255. Il numero massimo di caratteri necessari per rappresentare un numero compreso nell'intervallo è tre (sono necessari tre caratteri per rappresentare i valori da 100 a 255).

Lunghezze predefinite dei campi per l'archiviazione file nativa

Nella tabella seguente vengono elencate le lunghezze di campo predefinite per i dati da archiviare come tipo di archiviazione file nativi. La lunghezza dei dati che ammettono valori Null è uguale alla lunghezza dei dati che non ammettono valori Null e i dati di tipo carattere vengono sempre archiviati nel formato carattere.

Tipo di dati Lunghezza predefinita (caratteri)
bit 1
binary Lunghezza definita per la colonna
varbinary Lunghezza definita per la colonna
Immagine 0
datetime 8
smalldatetime 4
float 8
real 4
int 4
bigint 8
smallint 2
tinyint 1
money 8
smallmoney 4
decimal 1
numeric 1
uniqueidentifier 16
timestamp 8
vector Intestazione vettore a 8 byte + dimensione dell'array float

1 Per altre informazioni sui tipi di dati decimali e numerici , vedere decimal e numeric (Transact-SQL).

In tutti i casi illustrati in precedenza, per creare un file di dati per un successivo ricaricamento in SQL Server e ridurre al minimo lo spazio utilizzato per l'archiviazione, utilizzare un prefisso di lunghezza con il tipo di archiviazione nel file e la lunghezza di campo predefiniti.