共用方式為


大容量導入數據時保留識別值 (SQL Server)

您可以將包含識別值的資料檔案大量匯入 Microsoft SQL Server 的執行個體中。 根據預設,會忽略所匯入資料檔案中的識別資料行值,SQL Server 會自動指定唯一值。 唯一值的依據是資料表建立期間所指定的初始值及累加值。

如果資料檔不包含資料表中識別碼資料行的值,請使用格式檔案指定在匯入資料時應略過資料表中的識別碼資料行。 SQL Server 會自動指派數據行的唯一值。

若要在將資料列大量匯入資料表時,不讓 SQL Server 指派識別值,請使用適當的 keep-identity 命令限定詞。 當您指定 keep-identity 限定詞時,SQL Server 會使用資料檔案中的識別值。 這些限定詞如下:

指令 保持身份限定詞 限定詞類型
bcp -E 開關
批量插入 保持身份 論點
INSERT ...SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITY 資料表提示

如需詳細資訊,請參閱 bcp 公用程式BULK INSERT (Transact-SQL)OPENROWSET (Transact-SQL)INSERT (Transact-SQL)SELECT (Transact-SQL)資料表提示 (Transact-SQL)

備註

若要建立可用於多個資料表中或可在不參考任何資料表的情況下從應用程式進行呼叫的自動遞增數字,請參閱 序號

範例

本主題中的範例會使用 INSERT ... SELECT * FROM OPENROWSET(BULK...) 來批量匯入資料,並保留預設值。

範例數據表

大容量導入範例會要求在 dbo 架構下的 AdventureWorks 範例資料庫中建立名為 myTestKeepNulls 數據表的數據表。 若要建立此數據表。 在 SQL Server Management Studio 查詢編輯器中,執行:

USE AdventureWorks;  
GO  
SELECT * INTO HumanResources.myDepartment   
   FROM HumanResources.Department  
      WHERE 1=0;  
GO  
SELECT * FROM HumanResources.myDepartment;  

以 IDENTITY_INSERT 為基礎的 Department 數據表 myDepartment 會設定為 OFF。 因此,若要將數據匯入識別數據行,您必須指定 KEEPIDENTITY 或 -E

範例數據檔

在大容量導入範例中使用的檔案包含從 HumanResources.Department 資料表以原生格式大容量導出的資料。 若要建立數據檔,請在Microsoft Windows 命令提示字元中,輸入:

bcp AdventureWorks.HumanResources.Department out myDepartment-n.Dat -n -T  

範例格式檔案

這個大容量導入範例會使用 XML 格式檔案, myDepartment-f-x-n.Xml這個檔案會使用原生數據格式。 這個範例使用 bcp 來從 HumanResources.Department 資料庫的 AdventureWorks 數據表中產生這個格式檔案。 在 Windows 命令提示字元中,輸入:

bcp AdventureWorks.HumanResources.Department format nul -n -x -f myDepartment-f-n-x.Xml -T  

如需建立格式檔案的詳細資訊,請參閱 建立格式檔案 (SQL Server)

A。 使用 bcp 和保留識別值

下列範例示範如何在使用bcp進行大容量數據導入時保留識別值。 bcp命令會使用 格式檔案 myDepartment-f-n-x.Xml,並包含下列參數:

限定詞 說明
-E 指定數據檔中的識別值或值要用於識別數據行。
-T 指定公用程式會使用信任的連線連接到 SQL Server。

在 Windows 命令提示字元中, 輸入 。

bcp AdventureWorks.HumanResources.myDepartment in C:\myDepartment-n.Dat -f C:\myDepartment-f-n-x.Xml -E -T  
  

B. 使用 BULK INSERT 和保留識別值

下列範例使用 BULK INSERT 將數據從 myDepartment-c.Dat 檔案大容量導入 AdventureWorks.HumanResources.myDepartment 數據表。 語句會 myDepartment-f-n-x.Xml 使用格式檔案,並包含 KEEPIDENTITY 選項,以確保資料檔中的任何身分識別值都會保留。

在 SQL Server Management Studio 查詢編輯器中,執行:

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. 使用 OPENROWSET 和保留識別值

下列範例會使用 OPENROWSET 大量資料列集提供者,將數據從 myDepartment-c.Dat 檔案批次匯入到 AdventureWorks.HumanResources.myDepartment 資料表。 語句使用 myDepartment-f-n-x.Xml 格式文件,並包含 KEEPIDENTITY 提示,以確保資料檔中的任何識別值都會被保留。

在 SQL Server Management Studio 查詢編輯器中,執行:

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  
  

相關工作

若要使用格式檔

若要使用大量匯入或大量匯出的資料格式

為了在使用 bcp 時指定資料格式以確保相容性

  1. 指定欄位與資料列結束字元 (SQL Server)

  2. 使用 bcp 指定資料檔的前置長度 (SQL Server)

  3. 使用 bcp 指定檔案儲存類型 (SQL Server)

另請參閱

BACKUP (Transact-SQL)
bcp 公用程式
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
資料表中的提示 (Transact-SQL)