Mantenere i valori Identity durante l'importazione bulk dei dati (SQL Server)

È possibile eseguire l'importazione bulk di file di dati contenenti valori Identity in un'istanza di Microsoft SQL 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 per la colonna dell'identificatore nella tabella, utilizzare un file di formato per specificare di ignorare la colonna dell'identificatore nella tabella durante l'importazione dei dati. SQL Server assegna automaticamente valori univoci per la 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).

[!NOTA]

Per creare un numero a incremento automatico da utilizzare in più tabelle o da chiamare dalle applicazioni senza fare riferimento ad alcuna tabella, vedere Numeri di sequenza.

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 la tabella seguente. 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.

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 (SQL Server).

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

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

  1. Impostazione dei caratteri di terminazione del campo e della riga (SQL Server)

  2. Specificare la lunghezza del prefisso nei file di dati tramite bcp (SQL Server)

  3. Specifica del tipo di archiviazione di file tramite bcp (SQL Server)

Vedere anche

Riferimento

BACKUP (Transact-SQL)

Utilità bcp

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

Hint di tabella (Transact-SQL)