Share via


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 nel 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 in blocco delle righe di dati in una tabella, utilizzare il qualificatore del comando 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 altre 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 usare in più tabelle o da chiamare dalle applicazioni senza fare riferimento ad alcuna tabella, vedere Numeri di sequenza.

Esempio

Gli esempi in questo argomento importano dati in blocco con INSERT ... SELECT * FROM OPENROWSET(BULK...) e mantenere i valori predefiniti.

Tabella di esempio

Gli esempi di importazione in blocco richiedono la creazione di una tabella denominata myTestKeepNulls nel database di esempio AdventureWorks nello schema dbo. Per creare la tabella seguente. in SQL Server Management Studio Editor di query 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 oppure -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 immettere:

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 altre informazioni sulla creazione di un file di formato, vedere Creare un file di formato (SQL Server).For more information about creating a format file, see Create a Format File (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 attendibile.

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.

Nel SQL Server Management Studio Editor di query 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.

Nel SQL Server Management Studio Editor di query 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

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