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