다음을 통해 공유


데이터 대량 가져오기 중 ID 값 유지(SQL Server)

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

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

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

명령 ID 유지 한정자 한정자 유형
bcp -E 스위치
BULK INSERT KEEPIDENTITY 인수
INSERT ... 선택 * 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로 설정되어 있습니다. 따라서 ID 열로 데이터를 가져오려면 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 사용 및 ID 값 유지

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

한정자 Description
-E 데이터 파일의 ID 값이 ID 열에 사용되도록 지정합니다.
-T 유틸리티가 bcp 신뢰할 수 있는 연결을 사용하여 SQL Server 연결하도록 지정합니다.

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

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

B. BULK INSERT 사용 및 ID 값 유지

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

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 사용 및 ID 값 유지

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

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)