Condividi tramite


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 MicrosoftSQL 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.

Nota importanteImportante

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.