다음을 통해 공유


데이터 대량 가져오기 중 ID 값 유지

Microsoft SQL Server 인스턴스로 ID 값이 들어 있는 데이터 파일을 대량으로 가져옵니다. 기본적으로 가져온 데이터 파일의 ID 열 값은 무시되고 SQL Server가 자동으로 고유 값을 할당합니다. 고유 값은 테이블 작성 중에 지정된 초기 및 증분 값을 기준으로 합니다.

데이터 파일에 테이블의 ID 열에 대한 값이 없으면 서식 파일을 사용하여 데이터를 가져올 때 테이블의 ID 열을 건너뛰어야 함을 지정할 수 있습니다. SQL Server는 자동으로 열에 고유 값을 할당합니다.

SQL Server가 ID 값을 할당하지 않으면서 테이블에 데이터 행을 대량으로 가져오려면 적절한 ID 유지 명령 한정자를 사용합니다. ID 유지 한정자를 지정하면 SQL Server는 데이터 파일의 ID 값을 사용합니다. 이러한 한정자는 다음과 같습니다.

명령

ID 유지 한정자

한정자 유형

bcp

-E

스위치

BULK INSERT

KEEPIDENTITY

인수

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 스키마의 AdventureWorks2008R2 예제 데이터베이스에 myTestKeepNulls라는 테이블을 만들어야 합니다. 이 테이블을 만들려면 SQL Server Management Studio 쿼리 편집기에서 다음을 실행합니다.

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

myDepartment의 기반이 되는 Department 테이블은 IDENTITY_INSERT가 OFF로 설정되어 있습니다. 따라서 ID 열로 데이터를 가져오려면 KEEPIDENTITY 또는 -E를 지정해야 합니다.

예제 데이터 파일

대량 가져오기 예에 사용된 데이터 파일에는 HumanResources.Department 테이블에서 네이티브 형식으로, 대량으로 내보낸 데이터가 들어 있습니다. 데이터 파일을 만들려면 Microsoft Windows 명령 프롬프트에서 다음을 입력합니다.

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

예제 서식 파일

이 대량 가져오기 예에서는 네이티브 데이터 형식을 사용하는 XML 서식 파일인 myDepartment-f-x-n.Xml을 사용합니다. 이 예에서는 bcp를 사용하여 AdventureWorks2008R2 데이터베이스의 HumanResources.Department 테이블에서 이 서식 파일을 만듭니다. Windows 명령 프롬프트에서 다음을 입력합니다.

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

서식 파일을 만드는 방법은 서식 파일 만들기를 참조하십시오.

1. bcp 사용 및 ID 값 유지

다음 예에서는 bcp를 사용하여 데이터를 대량으로 가져올 때 ID 값을 유지하는 방법을 보여 줍니다. bcp 명령은 서식 파일인 myDepartment-f-n-x.Xml을 사용하며 다음 스위치를 포함합니다.

한정자

설명

-E

데이터 파일의 ID 값이 ID 열에 사용되도록 지정합니다.

-T

bcp 유틸리티가 트러스트된 연결을 통해 SQL Server로 연결되도록 지정합니다.

Windows 명령 프롬프트에서 다음을 입력합니다.

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

2. BULK INSERT 사용 및 ID 값 유지

다음 예에서는 BULK INSERT를 사용하여 myDepartment-c.Dat 데이터 파일에서 AdventureWorks2008R2.HumanResources.myDepartment 테이블로 데이터를 대량으로 가져옵니다. 해당 문은 myDepartment-f-n-x.Xml 서식 파일을 사용하며 KEEPIDENTITY 옵션을 포함하여 데이터 파일의 모든 ID를 유지합니다.

SQL Server Management Studio 쿼리 편집기에서 다음을 실행합니다.

USE AdventureWorks2008R2;
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;

3. OPENROWSET 사용 및 ID 값 유지

다음 예에서는 OPENROWSET 대량 행 집합 공급자를 사용하여 myDepartment-c.Dat 파일에서 AdventureWorks2008R2.HumanResources.myDepartment 테이블로 데이터를 대량으로 가져옵니다. 해당 문은 myDepartment-f-n-x.Xml 서식 파일을 사용하고 KEEPIDENTITY 힌트를 포함하여 데이터 파일의 모든 ID 값을 유지합니다.

SQL Server Management Studio 쿼리 편집기에서 다음을 실행합니다.

USE AdventureWorks2008R2;
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