Definizione della lunghezza di campo tramite bcp
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 richiede di specificare la lunghezza di campo, le lunghezze di campo predefinite e l'impatto della lunghezza di campo sull'archiviazione dei dati in file di dati contenenti dati char.
Richiesta di lunghezza di campo da parte di bcp
Se un comando interattivo bcp include l'opzione in o out senza l'opzione relativa al formato di file (-f) o al formato dei dati (-n, -c, -w o -N), viene richiesta la lunghezza di campo di ogni campo di dati, come illustrato di seguito:
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.
[!NOTA] Dopo avere specificato in modo interattivo tutti i campi in un comando bcp, viene richiesto di salvare le risposte per ogni campo in un file con formato diverso da XML. Per ulteriori informazioni sui file in formato non XML, vedere Informazioni sui file di formato non XML.
La richiesta o meno della lunghezza di campo da parte del comando bcp dipende da diversi fattori, come illustrato di seguito:
- Quando si copiano tipi di dati con lunghezza non fissa e si specifica una lunghezza di profilo pari a 0, bcp richiede una lunghezza di campo.
- Quando l'utilità bcp converte i dati non carattere in dati di tipo carattere, viene proposta una lunghezza di campo predefinita sufficiente per archiviare i dati.
- Se il tipo di file di archiviazione è non carattere, il comando bcp non richiede l'immissione della lunghezza di campo. I dati vengono archiviati utilizzando tipo di rappresentazione nativo di Microsoft SQL Server (formato nativo).
Utilizzo delle lunghezze di campo predefinite
In genere, è consigliabile accettare i valori predefiniti per la lunghezza di campo proposti da bcp. Quando si crea un file in modalità carattere, l'utilizzo della lunghezza di campo predefinita consente di assicurare che i dati non verranno troncati e che non si verificheranno errori di overflow numerico
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 insufficiente per i dati, l'utilità bcp visualizza un messaggio di overflow e i dati non vengono copiati. 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, tale 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/mm/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 di campo predefinite per l'archiviazione di 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. La lunghezza dei valori Null è uguale alla lunghezza dei valori non Null.
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 |
image |
0 |
datetime |
24 |
smalldatetime |
24 |
float |
30 |
real |
30 |
int |
12 |
bigint |
19 |
smallint |
7 |
tinyint |
5 |
money |
30 |
smallmoney |
30 |
decimal |
41* |
numeric |
41* |
uniqueidentifier |
37 |
timestamp |
17 |
varchar(max) |
0 |
varbinary(max) |
0 |
nvarchar(max) |
0 |
UDT |
Lunghezza della colonna UDT |
XML |
0 |
*Per ulteriori informazioni sui tipi di dati decimal e numeric, vedere decimal e numeric (Transact-SQL).
[!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 di campo predefinite per l'archiviazione di file nativi
Nella tabella seguente vengono elencate le lunghezze di campo predefinite per i dati da archiviare come tipo di archiviazione file nativi. La lunghezza dei valori Null è uguale alla lunghezza dei valori non 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 |
image |
0 |
datetime |
8 |
smalldatetime |
4 |
float |
8 |
real |
4 |
int |
4 |
bigint |
8 |
smallint |
2 |
tinyint |
1 |
money |
8 |
smallmoney |
4 |
decimal1 |
* |
numeric1 |
* |
uniqueidentifier |
16 |
timestamp |
8 |
1 Per ulteriori informazioni sui tipi di dati decimal e numeric, 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.
Vedere anche
Concetti
Impostazione dei caratteri di terminazione del campo e della riga
Impostazione della lunghezza del prefisso in file di dati
Specifica del tipo di archiviazione di file tramite bcp
Archiviazione di dati in formato carattere
Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione di massa
Altre risorse
Utilità bcp
Tipi di dati (Transact-SQL)