Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Analytics 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.
Contenuti correlati
- utilità bcp
- tipi di dati (Transact-SQL)
- Specificare i caratteri di terminazione dei campi e delle righe (SQL Server)
- Specificare la lunghezza del prefisso nei file di dati usando bcp (SQL Server)
- Specificare il tipo di archiviazione file usando bcp (SQL Server)
- Mantenere i valori Null o i valori predefiniti durante un'importazione in blocco (SQL Server)