2010年7月16日 星期五

大量匯入資料時保留識別值

http://technet.microsoft.com/zh-tw/library/ms186335(SQL.90).aspx

以將包含識別值的資料檔案大量匯入 Microsoft SQL Server 的執行個體中。根據預設,會忽略所匯入資料檔案中的識別資料行值,SQL Server 會自動指定唯一值。唯一值的依據是資料表建立期間所指定的初始值及累加值。
如果資料檔不包含資料表中識別碼資料行的值,請使用格式檔案指定在匯入資料時應略過資料表中的識別碼資料行。SQL Server 會自動為資料行指定唯一值。
若要在將資料列大量匯入資料表時,不讓 SQL Server 指定識別值,請使用適當的 keep-identity 命令限定詞。當您指定 keep-identity 限定詞時,SQL Server 會使用資料檔案中的識別值。這些限定詞如下:

命令 Keep-identity 限定詞 限定詞類型
bcp-E參數
BULK INSERTKEEPIDENTITY引數
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;

myDepartment 所依據的 Department 資料表已將 IDENTITY_INSERT 設為 OFF。因此,若要將資料匯入識別資料行,您必須指定 KEEPIDENTITY 或 -E。如需資料表的結構描述,請參閱<Department 資料表 (AdventureWorks)>。

範例資料檔

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

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

範例格式檔案

大量匯入範例使用 XML 格式檔案 myDepartment-f-x-n.Xml,而它是使用原生資料格式。此範例使用 bcpAdventureWorks 資料庫的 HumanResources.Department 資料表來產生這個格式檔案。在 Windows 命令提示字元中,輸入:

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

如需有關建立格式檔案的詳細資訊,請參閱<建立格式檔案>。

沒有留言:

張貼留言