Definizione della lunghezza di campo tramite bcp (SQL Server)Specify Field Length by Using bcp (SQL Server)

La lunghezza del campo indica il numero massimo di caratteri necessari per rappresentare i dati in formato carattere.The field length indicates the maximum number of characters that are required to represent data in character format. Se i dati sono archiviati in formato nativo, la lunghezza di campo è già nota. Ad esempio, il tipo di dati int accetta 4 byte.The field length is already known if the data is stored in the native format; for example, the int data type takes 4 bytes. 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 .If you have indicated 0 for the prefix length, the bcp command prompts you for field length, the default field lengths, and the impact of field-length on data storage in data files that contain char data.

Richiesta di lunghezza di campo da parte di bcpThe bcp Prompt for Field Length

Se un comando interattivo bcp include l'opzione in o out senza l'opzione relativa al file di formato(-f) o al formato dei dati (-n, -c, -w, or -N), viene chiesta la lunghezza del campo di ogni campo di dati, come illustrato di seguito:If an interactive bcp command contains the in or out option without either the format file switch (-f) or a data-format switch (-n, -c, -w, or -N), the command prompts for the field length of each data field, as follows:

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

Per un esempio contestualizzato di tale richiesta, vedere Specificare i formati di dati per la compatibilità mediante bcp (SQL Server).For an example that shows this prompt in context, see Specify Data Formats for Compatibility when Using bcp (SQL Server).

Nota

Dopo aver specificato in modo interattivo tutti i campi in un comando bcp, viene chiesto di salvare le risposte relative a ogni campo in un file di formato non XML.After you interactively specify all of the fields in a bcp command, the command prompts you save your responses for each field in a non-XML format file. Per altre informazioni sui file di formato non XML, vedere File in formato non XML (SQL Server).For more information on non-XML format files, see Non-XML Format Files (SQL Server).

La richiesta o meno della lunghezza del campo da parte del comando bcp dipende da diversi fattori, ad esempio:Whether a bcp command prompts for field length depends on several factors, as follows:

  • Quando si copiano tipi di dati con lunghezza non fissa e si specifica una lunghezza del prefisso pari a 0, bcp richiede una lunghezza del campo.When you copy data types that are not of fixed length and you specify a prefix length of 0, bcp prompts for a field length.

  • 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.When converting noncharacter data to character data, bcp suggests a default field length large enough to store the data.

  • Se il tipo di file di archiviazione è non carattere, il comando bcp non richiede l'immissione della lunghezza del campo.If the file storage type is noncharacter, the bcp command does not prompt for a field length. I dati vengono archiviati usando il tipo di rappresentazione nativo di MicrosoftMicrosoft SQL ServerSQL Server (formato nativo).The data is stored in the MicrosoftMicrosoft SQL ServerSQL Server native data representation (native format).

Utilizzo delle lunghezze di campo predefiniteUsing Default Field Lengths

In genere, MicrosoftMicrosoft consiglia di accettare i valori predefiniti per la lunghezza del campo proposti da bcp.Generally, MicrosoftMicrosoft recommends that you accept the bcp-suggested default values for the field length. 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 numericoWhen a character mode data file is created, using the default field length ensures that data is not truncated and that numeric overflow errors do not occur.

Se si specifica una lunghezza di campo non valida, è possibile che si verifichino errori.If you specify a field length that is incorrect, problems can occur. 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.For instance, if you copy numeric data and you specify a field length that is too short for the data, the bcp utility prints an overflow message and does not copy the data. 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.Also, if you export datetime data and specify a field length of less than 26 bytes for the character string, the bcp utility truncates the data without an error message.

Importante

Se si utilizza l'opzione predefinita per la dimensione, SQL ServerSQL Server prevede di leggere una stringa intera.When the default size option is used, SQL ServerSQL Server expects to read an entire string. In alcuni casi, l'utilizzo di una lunghezza di campo predefinita può provocare un errore di tipo "Fine del file imprevista".In some situations, use of a default field length can lead to an "unexpected end of file" error. 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 .Typically, this error occurs with the money and datetime data types when only part of the expected field occurs in the data file; for example, when a datetime value of mm/dd/yy is specified without the time component and is, therefore, shorter than the expected 24 character length of a datetime value in char format. 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.To avoid this type of error, use field terminators or fixed-length data fields, or change the default field length by specifying another value.

Lunghezze di campo predefinite per l'archiviazione di file di caratteriDefault Field Lengths for Character File Storage

Nella tabella seguente vengono elencate le lunghezze di campo predefinite per i dati da archiviare come tipo di archiviazione file di caratteri.The following table lists the default field lengths for data to be stored as a character-file storage type. La lunghezza dei dati che ammettono valori Null è uguale alla lunghezza dei dati che non ammettono valori Null.Nullable data is the same length as nonnull data.

Tipo di datiData type Lunghezza predefinita (caratteri)Default length (characters)
charchar Lunghezza definita per la colonnaLength defined for the column
varcharvarchar Lunghezza definita per la colonnaLength defined for the column
ncharnchar Due volte la lunghezza definita per la colonnaTwice the length defined for the column
nvarcharnvarchar Due volte la lunghezza definita per la colonnaTwice the length defined for the column
TextText 00
ntextntext 00
bitbit 11
binarybinary Due volte la lunghezza definita per la colonna + 1Twice the length defined for the column + 1
varbinaryvarbinary Due volte la lunghezza definita per la colonna + 1Twice the length defined for the column + 1
imageimage 00
datetimedatetime 2424
smalldatetimesmalldatetime 2424
floatfloat 3030
realreal 3030
intint 1212
bigintbigint 1919
smallintsmallint 77
tinyinttinyint 55
moneymoney 3030
smallmoneysmallmoney 3030
decimaldecimal 4141
numericnumeric 4141
uniqueidentifieruniqueidentifier 3737
timestamptimestamp 1717
varchar(max)varchar(max) 00
varbinary(max)varbinary(max) 00
nvarchar(max)nvarchar(max) 00
UDT (tipo definito dall'utente)UDT Lunghezza della colonna UDTLength of the user-defined term (UDT) column
XMLXML 00

*Per altre informazioni sui tipi di dati decimal e numeric, vedere decimal e numeric (Transact-SQL).*For more information about the decimal and numeric data types, see decimal and 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).A column of type tinyint can have values from 0 through 255; the maximum number of characters that are needed to represent any number in that range is three (representing values 100 through 255).

Lunghezze di campo predefinite per l'archiviazione di file nativiDefault Field Lengths for Native File Storage

Nella tabella seguente vengono elencate le lunghezze di campo predefinite per i dati da archiviare come tipo di archiviazione file nativi.The following table lists the default field lengths for data to be stored as native file storage type. 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.Nullable data is the same length as nonnull data, and character data is always stored in character format.

Tipo di datiData type Lunghezza predefinita (caratteri)Default length (characters)
bitbit 11
binarybinary Lunghezza definita per la colonnaLength defined for the column
varbinaryvarbinary Lunghezza definita per la colonnaLength defined for the column
imageimage 00
datetimedatetime 88
smalldatetimesmalldatetime 44
floatfloat 88
realreal 44
intint 44
bigintbigint 88
smallintsmallint 22
tinyinttinyint 11
moneymoney 88
smallmoneysmallmoney 44
decimaldecimal *
numericnumeric *
uniqueidentifieruniqueidentifier 1616
timestamptimestamp 88

*Per altre informazioni sui tipi di dati decimal e numeric, vedere decimal e numeric (Transact-SQL).*For more information about the decimal and numeric data types, see decimal and numeric (Transact-SQL).

In tutti i casi illustrati in precedenza, per creare un file di dati per un successivo ricaricamento in SQL ServerSQL 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.In all of the preceding cases, to create a data file for later reloading into SQL ServerSQL Server that keeps the storage space to a minimum, use a length prefix with the default file storage type and the default field length.

Vedere ancheSee Also

Utilità bcp bcp Utility
Tipi di dati (Transact-SQL) Data Types (Transact-SQL)
Specificare caratteri di terminazione del campo e della riga (SQL Server) Specify Field and Row Terminators (SQL Server)
Specificare la lunghezza del prefisso nei file di dati tramite bcp (SQL Server) Specify Prefix Length in Data Files by Using bcp (SQL Server)
Specificare il tipo di archiviazione di file tramite bcp (SQL Server) Specify File Storage Type by Using bcp (SQL Server)
Mantenimento dei valori Null o uso dei valori predefiniti durante un'importazione bulk (SQL Server) Keep Nulls or Use Default Values During Bulk Import (SQL Server)