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.
Nota
Per i file di formato di esempio che ignorano una colonna di tabella, vedere Usare un file di formato per ignorare una colonna di tabella (SQL Server).For sample format files that skip a table column, see Use a Format File to Skip a Table Column (SQL Server).
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é "NULL
Default 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 |
Nota
per altre informazioni, vedere INSERT (Transact-SQL),SELECT (Transact-SQL),OPENROWSET (Transact-SQL) e Hint di tabella (Transact-SQL)
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
Mantenere i valori Identity durante l'importazione bulk dei dati (SQL Server)
Preparazione dei dati per l'importazione o l'esportazione bulk (SQL Server)
Per utilizzare un file di formato
Usare un file di formato per l'importazione bulk dei dati (SQL Server)
Usare un file di formato per escludere un campo dati (SQL Server)
Utilizzo di un file di formato per ignorare una colonna di una tabella (SQL Server)
Per utilizzare formati di dati per l'importazione o l'esportazione bulk
Importare dati in formato nativo e carattere da versioni precedenti di SQL Server
Usare il formato carattere per importare o esportare dati (SQL Server)
Usare il formato nativo per importare o esportare dati (SQL Server)
Usare il formato carattere Unicode per importare o esportare dati (SQL Server)
Utilizzare il formato Unicode nativo per importare o esportare dati (SQL Server)
Per specificare i formati di dati per la compatibilità mediante bcp
Impostazione dei caratteri di terminazione del campo e della riga (SQL Server)
Specificare la lunghezza del prefisso nei file di dati tramite bcp (SQL Server)
Specifica del tipo di archiviazione di file tramite bcp (SQL Server)
Vedere anche
BACKUP (Transact-SQL)
OPENROWSET (Transact-SQL)
Utilità bcp
BULK INSERT (Transact-SQL)
Hint di tabella (Transact-SQL)