Share via


Mantenimento dei valori Null o utilizzo dei valori predefiniti durante un'importazione bulk (SQL Server)

Per impostazione predefinita, durante l'importazione di dati in una tabella il comando bcp e l'istruzione BULK INSERT osservano gli eventuali valori predefiniti che sono stati specificati per le colonne della tabella. Ad esempio, se un file di dati contiene un campo Null, verrà caricato nel campo il valore predefinito della colonna. Il comando bcp e l'istruzione BULK INSERT consentono entrambi di specificare che dovranno essere mantenuti i valori Null.

Un'istruzione INSERT regolare mantiene invece il valore Null anziché inserire un valore predefinito. L'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...) funziona in modo analogo a un'istruzione INSERT regolare, ma supporta inoltre un hint di tabella per l'inserimento di valori predefiniti.

Tabella e file di dati di esempio

Per eseguire gli esempi riportati in questo argomento, è necessario creare una tabella e un file di dati di esempio.

Tabella di esempio

Gli esempi richiedono la creazione di una tabella denominata MyTestDefaultCol2 nel database di esempio AdventureWorks nello schema dbo. Per creare questa tabella, in Microsoft SQL Server Management Studio Editor di query eseguire:

USE AdventureWorks;  
GO  
CREATE TABLE MyTestDefaultCol2   
(Col1 smallint,  
Col2 nvarchar(50) DEFAULT 'Default value of Col2',  
Col3 nvarchar(50)   
);  
GO  
  

Si noti che la seconda colonna della tabella, Col2, ha un valore predefinito.

File di formato di esempio

In alcuni degli esempi di importazione bulk viene utilizzato un file di formato non XML, MyTestDefaultCol2-f-c.Fmt che corrisponde esattamente alla tabella MyTestDefaultCol2. Per creare questo file di formato, al prompt dei comandi di Microsoft Windows immettere:

bcp AdventureWorks..MyTestDefaultCol2 format nul -c -f C:\MyTestDefaultCol2-f-c.Fmt -t, -r\n -T  
  

Per informazioni sulla creazione di file di formato, vedere Creare un file di formato (SQL Server).

File di dati di esempio

Nell'esempio viene utilizzato un file di dati di esempio, MyTestEmptyField2-c.Dat, che non contiene alcun valore nel secondo campo. Il file di dati MyTestEmptyField2-c.Dat contiene i record seguenti:

1,,DataField3  
2,,DataField3  
  

Mantenimento dei valori Null con bcp o BULK INSERT

I qualificatori seguenti specificano che un campo vuoto del file di dati mantiene il relativo valore Null durante l'importazione bulk anziché ereditare un valore predefinito (se disponibile) per le colonne della tabella.

Comando Qualifier Tipo di qualificatore
bcp -k Opzione
BULK INSERT KEEPNULLS1 Argomento

1 Per BULK INSERT, se i valori predefiniti non sono disponibili, è necessario definire la colonna della tabella per consentire valori Null.

Nota

Questi qualificatori disabilitano il controllo delle definizioni DEFAULT di una tabella mediante i comandi per l'importazione bulk. Per le istruzioni INSERT simultanee, le definizioni DEFAULT sono tuttavia previste.

Per altre informazioni, vedere Utilità bcp e BULK INSERT (Transact-SQL).

Esempio

Gli esempi in questa sezione eseguono l'importazione in blocco con bcp o BULK INSERT e mantengono i valori Null.

La seconda colonna della tabella, Col2, ha un valore predefinito. Il campo corrispondente del file di dati contiene una stringa vuota. Per impostazione predefinita, se si usa bcp o BULK INSERT per importare i dati di questo file di dati nella tabella MyTestDefaultCol2, viene inserito il valore predefinito di Col2 e viene generato il risultato seguente:

1 Default value of Col2 DataField3
2 Default value of Col2 DataField3

Per inserire "" anziché "NULLDefault value of Col2", è necessario usare l'opzione -k switch o KEEPNULL, come illustrato negli esempi bcp e BULK INSERT seguenti.

Utilizzo di bcp e mantenimento dei valori Null

L'esempio seguente mostra come mantenere i valori Null in un comando bcp. Il comando bcp contiene le opzioni seguenti:

Opzione Descrizione
-f Specifica che il comando utilizza un file di formato.
-k Specifica che durante l'operazione il valore delle colonne vuote deve essere Null, ovvero che non verranno inseriti valori predefiniti in tali colonne.
-T Specifica che l'utilità bcp si connette a SQL Server con una connessione attendibile.

Al prompt dei comandi di Windows digitare:

bcp AdventureWorks..MyTestDefaultCol2 in C:\MyTestEmptyField2-c.Dat -f C:\MyTestDefaultCol2-f-c.Fmt -k -T  
  

Utilizzo di BULK INSERT e mantenimento dei valori Null

Nell'esempio seguente viene illustrato come utilizzare l'opzione KEEPNULLS in un'istruzione BULK INSERT. Da uno strumento di query, ad esempio SQL Server Management Studio Editor di query, eseguire:

USE AdventureWorks;  
GO  
BULK INSERT MyTestDefaultCol2  
   FROM 'C:\MyTestEmptyField2-c.Dat'  
   WITH (  
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ',',  
      KEEPNULLS  
   );  
GO  
  

Mantenimento dei valori predefiniti con INSERT ... SELECT * FROM OPENROWSET(BULK...)

Per impostazione predefinita, le colonne non specificate nell'operazione di caricamento bulk vengono impostate su NULL da INSERT ... SELECT * FROM OPENROWSET(BULK...). Tuttavia, è possibile specificare che per un campo vuoto nel file di dati, la colonna della tabella corrispondente usa il valore predefinito (se presente). Per utilizzare i valori predefiniti, specificare l'hint di tabella seguente:

Comando Qualifier Tipo di qualificatore
INSERT ... SELECT * FROM OPENROWSET(BULK...). WITH(KEEPDEFAULTS) Hint di tabella

Esempio

L'istruzione INSERT seguente... SELECT * FROM OPENROWSET(BULK...) esempio di importazione bulk dei dati e mantiene i valori predefiniti.

Per eseguire gli esempi, è necessario creare la tabella di esempio MyTestDefaultCol2, il file di dati MyTestEmptyField2-c.Dat e usare un file di formato, MyTestDefaultCol2-f-c.Fmt. Per informazioni sulla creazione di questi esempi, vedere la sezione relativa alla tabella e file di dati di esempio più indietro in questo argomento.

La seconda colonna della tabella, Col2, ha un valore predefinito. Il campo corrispondente del file di dati contiene una stringa vuota. Quando INSERT ... SELECT * FROM OPENROWSET(BULK...) importa i campi di questo file di dati nella tabella MyTestDefaultCol2 , per impostazione predefinita, NULL viene inserito in Col2 anziché nel valore predefinito. Questo comportamento predefinito genera il risultato seguente:

1 NULL DataField3
2 NULL DataField3

Per inserire il valore predefinito "Default value of Col2" anziché "NULL", è necessario utilizzare l'hint di tabella KEEPDEFAULTS, come è illustrato nell'esempio seguente. Da uno strumento di query, ad esempio SQL Server Management Studio Editor di query, eseguire:

USE AdventureWorks;  
GO  
INSERT INTO MyTestDefaultCol2  
    WITH (KEEPDEFAULTS)  
    SELECT *  
      FROM OPENROWSET(BULK  'C:\MyTestEmptyField2-c.Dat',  
      FORMATFILE='C:\MyTestDefaultCol2-f-c.Fmt'       
      ) as t1 ;  
GO  
  

Attività correlate

Per utilizzare un file di formato

Per utilizzare formati di dati per l'importazione o l'esportazione bulk

Per specificare i formati di dati per la compatibilità mediante bcp

Vedere anche

BACKUP (Transact-SQL)
OPENROWSET (Transact-SQL)
Utilità bcp
BULK INSERT (Transact-SQL)
Hint di tabella (Transact-SQL)