Mantenimento dei valori Identity durante l'importazione bulk dei dati
È possibile eseguire l'importazione bulk dei file di dati contenenti valori Identity in un'istanza di MicrosoftSQL Server. Per impostazione predefinita, i valori per la colonna Identity del file di dati importato vengono ignorati e sostituiti automaticamente da valori univoci assegnati da SQL Server. I valori univoci si basano sui valori di inizializzazione e incremento specificati durante la creazione della tabella.
Se il file di dati non contiene valori della colonna identificatore, utilizzare un file di formato per specificare che la colonna identificatore della tabella deve essere ignorata durante l'importazione dei dati. SQL Server assegnerà automaticamente valori univoci alla colonna.
Per impedire l'assegnazione da parte di SQL Server di valori Identity durante l'importazione bulk delle righe di dati in una tabella, utilizzare il qualificatore per il mantenimento dei valori Identity corretto. Quando si specifica un qualificatore per il mantenimento dei valori Identity, SQL Server utilizza i valori Identity nel file di dati. Sono disponibili i qualificatori seguenti:
Comando |
Qualificatore per il mantenimento dei valori Identity |
Tipo di qualificatore |
---|---|---|
bcp |
-E |
Opzione |
BULK INSERT |
KEEPIDENTITY |
Argomento |
INSERT ... SELECT * FROM OPENROWSET(BULK...). |
KEEPIDENTITY |
Hint di tabella |
Per ulteriori informazioni, vedere Utilità bcp, BULK INSERT (Transact-SQL), OPENROWSET (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL) e Hint di tabella (Transact-SQL).
Esempi
Negli esempi di questo argomento viene eseguita un'importazione bulk dei dati tramite INSERT ... SELECT * FROM OPENROWSET(BULK...) mantenendo i valori predefiniti.
Tabella di esempio
Gli esempi di importazione bulk richiedono la creazione di una tabella denominata myTestKeepNulls nel database di esempio AdventureWorks sotto lo schema dbo. Per creare questa tabella nell'editor di query di SQL Server Management Studio eseguire:
USE AdventureWorks;
GO
SELECT * INTO HumanResources.myDepartment
FROM HumanResources.Department
WHERE 1=0;
GO
SELECT * FROM HumanResources.myDepartment;
L'istruzione IDENTITY_INSERT nella tabella Department su cui si basa myDepartment è impostata su OFF. Pertanto, per importare i dati in una colonna Identity, è necessario specificare KEEPIDENTITY o -E. Per lo schema della tabella, vedere Tabella Department (AdventureWorks).
File di dati di esempio
Nel file di dati utilizzato negli esempi di importazione bulk sono inclusi i dati esportati dalla tabella HumanResources.Department nel formato nativo. Per creare il file di dati, al prompt dei comandi di Microsoft Windows digitare:
bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T
File di formato di esempio
In questi esempi di importazione bulk viene impiegato un file di formato XML, myDepartment-f-x-n.Xml, che utilizza formati nativi. Negli esempi viene utilizzato bcp per creare il file di formato dalla tabella HumanResources.Department del database AdventureWorks. Al prompt dei comandi di Windows digitare:
bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T
Per ulteriori informazioni sulla creazione di un file di formato, vedere Creazione di un file di formato.
A. Utilizzo di bcp mantenendo i valori Identity
Nell'esempio seguente viene illustrato come mantenere i valori Identity quando si utilizza bcp per l'importazione bulk dei dati. Il comando bcp utilizza il file di formato, myDepartment-f-n-x.Xml, e include le opzioni seguenti
Qualificatori |
Descrizione |
---|---|
-E |
Specifica che il valore o i valori Identity inclusi nel file di dati devono essere utilizzati per la colonna Identity. |
-T |
Specifica che l'utilità bcp si connette a SQL Server con una connessione trusted. |
Al prompt dei comandi di Windows digitare:
bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T
B. Utilizzo di BULK INSERT mantenendo i valori Identity
Nell'esempio seguente viene utilizzato BULK INSERT per l'importazione bulk dei dati dal file myDepartment-c.Dat nella tabella AdventureWorks.HumanResources.myDepartment. L'istruzione utilizza il file di formato myDepartment-f-n-x.Xml e include l'opzione KEEPIDENTITY per garantire che i valori Identity vengano mantenuti nel file di dati.
Nell'editor di query di SQL Server Management Studio eseguire:
USE AdventureWorks;
GO
DELETE HumanResources.myDepartment;
GO
BULK INSERT HumanResources.myDepartment
FROM 'C:\myDepartment-n.Dat'
WITH (
KEEPIDENTITY,
FORMATFILE='C:\myDepartment-f-n-x.Xml'
);
GO
SELECT * FROM HumanResources.myDepartment;
C. Utilizzo di OPENROWSET mantenendo i valori Identity
Nell'esempio seguente viene utilizzato il provider di set di righe con lettura bulk OPENROWSET per l'importazione bulk dei dati dal file myDepartment-c.Dat nella tabella AdventureWorks.HumanResources.myDepartment. L'istruzione utilizza il file di formato myDepartment-f-n-x.Xml e include l'hint KEEPIDENTITY per garantire che i valori Identity vengano mantenuti nel file di dati.
Nell'editor di query di SQL Server Management Studio eseguire:
USE AdventureWorks;
GO
DELETE HumanResources.myDepartment;
GO
INSERT INTO HumanResources.myDepartment
with (KEEPIDENTITY)
(DepartmentID, Name, GroupName, ModifiedDate)
SELECT *
FROM OPENROWSET(BULK 'C:\myDepartment-n.Dat',
FORMATFILE='C:\myDepartment-f-n-x.Xml') as t1;
GO