데이터 대량 가져오기 중 ID 값 유지(SQL Server)Keep Identity Values When Bulk Importing Data (SQL Server)

ID 값이 들어 있는 데이터 파일을 Microsoft SQL Server 인스턴스로 대량으로 가져올 수 있습니다.Data files that contain identity values can be bulk imported into an instance of Microsoft SQL Server. 기본적으로 가져온 데이터 파일의 ID 열 값은 무시되고 SQL ServerSQL Server 가 자동으로 고유 값을 할당합니다.By default, the values for the identity column in the data file that is imported are ignored and SQL ServerSQL Server assigns unique values automatically. 고유 값은 테이블 작성 중에 지정된 초기 및 증분 값을 기준으로 합니다.The unique values are based on the seed and increment values that are specified during table creation.

데이터 파일에 테이블의 ID 열에 대한 값이 없으면 서식 파일을 사용하여 데이터를 가져올 때 테이블의 ID 열을 건너뛰어야 함을 지정할 수 있습니다.If the data file does not contain values for the identifier column in the table, use a format file to specify that the identifier column in the table should be skipped when importing data. 자세한 내용은 서식 파일을 사용하여 테이블 열 건너뛰기(SQL Server) 를 참조하세요.See Use a Format File to Skip a Table Column (SQL Server) for additional information.

윤곽선Outline
ID 값 유지Keep Identity Values
예제 테스트 조건Example Test Conditions
 ● 샘플 테이블 ● Sample Table
 ● 샘플 데이터 파일 ● Sample Data File
 ● 샘플 비 XML 서식 파일 ● Sample Non-XML Format File
Examples
 ● 서식 파일 없이 bcp 사용 및 ID 값 유지 ● Using bcp and Keeping Identity Values without a Format File
 ● 비 XML 서식 파일과 함께 bcp 사용 및 ID 값 유지 ● Using bcp and Keeping Identity Values with a Non-XML Format File
 ● 서식 파일 없이 bcp 및 생성된 ID 값 사용 ● Using bcp and Generated Identity Values without a Format File
 ● 비 XML 서식 파일과 함께 bcp 및 생성된 ID 값 사용 ● Using bcp and Generated Identity Values with a Non-XML Format File
 ● 서식 파일 없이 BULK INSERT 사용 및 ID 값 유지 ● Using BULK INSERT and Keeping Identity Values without a Format File
 ● 비 XML 서식 파일과 함께 BULK INSERT 사용 및 ID 값 유지 ● Using BULK INSERT and Keeping Identity Values with a Non-XML Format File
 ● 서식 파일 없이 BULK INSERT 및 생성된 ID 값 사용 ● Using BULK INSERT and Generated Identity Values without a Format File
 ● 비 XML 서식 파일과 함께 BULK INSERT 및 생성된 ID 값 사용 ● Using BULK INSERT and Generated Identity Values with a Non-XML Format File
 ● 비 XML 서식 파일과 함께 OPENROWSET 사용 및 ID 값 유지 ● Using OPENROWSET and Keeping Identity Values with a Non-XML Format File
 ● 비 XML 서식 파일과 함께 OPENROWSET 및 생성된 ID 값 사용 ● Using OPENROWSET and Generated Identity Values with a Non-XML Format File

ID 값 유지 Keep Identity Values

SQL ServerSQL Server 가 ID 값을 할당하지 않으면서 테이블에 데이터 행을 대량으로 가져오려면 적절한 ID 유지 명령 한정자를 사용합니다.To prevent SQL ServerSQL Server from assigning identity values while bulk importing data rows into a table, use the appropriate keep-identity command qualifier. ID 유지 한정자를 지정하면 SQL ServerSQL Server 는 데이터 파일의 ID 값을 사용합니다.When you specify a keep-identity qualifier, SQL ServerSQL Server uses the identity values in the data file. 이러한 한정자는 다음과 같습니다.These qualifiers are as follows:

CommandCommand ID 유지 한정자Keep-identity qualifier 한정자 유형Qualifier type
bcpbcp -E-E 스위치Switch
BULK INSERTBULK INSERT KEEPIDENTITYKEEPIDENTITY 인수Argument
INSERT ... SELECT * FROM OPENROWSET(BULK...)INSERT ... SELECT * FROM OPENROWSET(BULK...) KEEPIDENTITYKEEPIDENTITY 테이블 힌트Table hint

자세한 내용은 bcp 유틸리티, BULK INSERT(Transact-SQL), OPENROWSET(Transact-SQL), INSERT(Transact-SQL), SELECT(Transact-SQL)테이블 힌트(Transact-SQL)를 참조하세요.For more information, see bcp Utility, BULK INSERT (Transact-SQL), OPENROWSET (Transact-SQL), INSERT (Transact-SQL), SELECT (Transact-SQL), and Table Hints (Transact-SQL).

참고

여러 테이블에서 사용할 수 있거나 테이블을 참조하지 않고 응용 프로그램에서 호출할 수 있는 자동으로 증가하는 번호를 만들려면 시퀀스 번호를 참조하세요.To create an automatically incrementing number that can be used in multiple tables or that can be called from applications without referencing any table, see Sequence Numbers.

예제 테스트 조건Example Test Conditions

이 항목의 예제는 아래에 정의된 테이블, 데이터 파일 및 서식 파일을 기반으로 합니다.The examples in this topic are based on the table, data file, and format file defined below.

샘플 테이블Sample Table

아래 스크립트에서는 테스트 데이터베이스와 myIdentity라는 테이블을 만듭니다.The script below creates a test database and a table named myIdentity. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase;
GO

USE TestDatabase;
CREATE TABLE dbo.myIdentity ( 
   PersonID smallint IDENTITY(1,1) NOT NULL,
   FirstName varchar(25) NOT NULL,
   LastName varchar(30) NOT NULL,
   BirthDate date
   );

샘플 데이터 파일Sample Data File

메모장을 사용하여 빈 파일 D:\BCP\myIdentity.bcp 를 만들고 아래 데이터를 삽입합니다.Using Notepad, create an empty file D:\BCP\myIdentity.bcp and insert the data below.

3,Anthony,Grosse,1980-02-23
2,Alica,Fatnowna,1963-11-14
1,Stella,Rosenhain,1992-03-02
4,Miller,Dylan,1954-01-05

또는 다음 PowerShell 스크립트를 실행하여 데이터 파일을 만들고 채울 수 있습니다.Alternatively, you can execute the following PowerShell script to create and populate the data file:

cls
# revise directory as desired
$dir = 'D:\BCP\';

$bcpFile = $dir + 'myIdentity.bcp';

# Confirm directory exists
IF ((Test-Path -Path $dir) -eq 0)
{
    Write-Host "The path $dir does not exist; please create or modify the directory.";
    RETURN;
};

# clear content, will error if file does not exist, can be ignored
Clear-Content -Path $bcpFile -ErrorAction SilentlyContinue;

# Add data
Add-Content -Path $bcpFile -Value '3,Anthony,Grosse,1980-02-23';
Add-Content -Path $bcpFile -Value '2,Alica,Fatnowna,1963-11-14';
Add-Content -Path $bcpFile -Value '1,Stella,Rosenhain,1992-03-02';
Add-Content -Path $bcpFile -Value '4,Miller,Dylan,1954-01-05';

#Review content
Get-Content -Path $bcpFile;
Invoke-Item $bcpFile;

샘플 비 XML 서식 파일Sample Non-XML Format File

SQL Server는 두 유형의 서식 파일, 즉 비 XML 서식 파일과 XML 서식 파일을 지원합니다.SQL Server support two types of format file: non-XML format and XML format. 비 XML 서식 파일은 이전 버전의 SQL Server에서 원래 지원했던 서식 파일입니다.The non-XML format is the original format that is supported by earlier versions of SQL Server. 자세한 내용은 비 XML 서식 파일(SQL Server) 을 검토하세요.Please review Non-XML Format Files (SQL Server) for detailed information. 다음 명령은 bcp 유틸리티 를 사용하여 myIdentity.fmt의 스키마를 기반으로 비 xml 서식 파일 myIdentity를 생성합니다.The following command will use the bcp utility to generate a non-xml format file, myIdentity.fmt, based on the schema of myIdentity. bcp 명령을 사용하여 서식 파일을 만들려면 데이터 파일 경로 대신 format 인수를 지정하고 nul 을 사용합니다.To use a bcp command to create a format file, specify the format argument and use nul instead of a data-file path. format 옵션에는 -f 옵션도 필요합니다.The format option also requires the -f option. 또한 이 예제에서 한정자 c 는 문자 데이터를 지정하는 데 사용되고, t, 는 쉼표를 필드 종결자로 지정하는 데 사용되며, T 는 통합된 보안을 사용하여 신뢰할 수 있는 연결을 지정하는 데 사용됩니다.In addition, for this example, the qualifier c is used to specify character data, t, is used to specify a comma as a field terminator, and T is used to specify a trusted connection using integrated security. 명령 프롬프트에서 다음 명령을 입력합니다.At a command prompt, enter the following command:

bcp TestDatabase.dbo.myIdentity format nul -c -f D:\BCP\myIdentity.fmt -t, -T

REM Review file
Notepad D:\BCP\myIdentity.fmt

중요

비 XML 서식 파일이 캐리지 리턴\줄 바꿈으로 끝나는지 확인하세요.Ensure your non-XML format file ends with a carriage return\line feed. 그러지 않으면 다음과 같은 오류 메시지가 표시될 수 있습니다.Otherwise you will likely receive the following error message:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Examples

아래 예제에서는 위에서 만든 데이터베이스, 데이터 파일 및 서식 파일을 사용합니다.The examples below use the database, datafile, and format files created above.

서식 파일 없이 bcp 사용 및 ID 값 유지Using bcp and Keeping Identity Values without a Format File

-E 스위치.-E switch. 명령 프롬프트에서 다음 명령을 입력합니다.At a command prompt, enter the following command:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -T -c -t, -E

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

비 XML 서식 파일과 함께 bcp 사용 및 ID 값 유지Using bcp and Keeping Identity Values with a Non-XML Format File

-E-f 스위치.-E and -f switches. 명령 프롬프트에서 다음 명령을 입력합니다.At a command prompt, enter the following command:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -f D:\BCP\myIdentity.fmt -T -E

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

서식 파일 없이 bcp 및 생성된 ID 값 사용Using bcp and Generated Identity Values without a Format File

기본값 사용.Using defaults. 명령 프롬프트에서 다음 명령을 입력합니다.At a command prompt, enter the following command:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -T -c -t,

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

Using bcp and Generated Identity Values with a Non-XML Format FileUsing bcp and Generated Identity Values with a Non-XML Format File

기본값 및 -f 스위치 사용.Using defaults and -f switch. 명령 프롬프트에서 다음 명령을 입력합니다.At a command prompt, enter the following command:

REM Truncate table (for testing)
SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myIdentity;"

REM Import data
bcp TestDatabase.dbo.myIdentity IN D:\BCP\myIdentity.bcp -f D:\BCP\myIdentity.fmt -T

REM Review results
SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myIdentity;"

서식 파일 없이 BULK INSERT 사용 및 ID 값 유지Using BULK INSERT and Keeping Identity Values without a Format File

KEEPIDENTITY 인수.KEEPIDENTITY argument. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity; -- for testing
BULK INSERT dbo.myIdentity
    FROM 'D:\BCP\myIdentity.bcp'
    WITH (
        DATAFILETYPE = 'char',  
        FIELDTERMINATOR = ',',  
        KEEPIDENTITY
        );

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;

Using BULK INSERT and Keeping Identity Values with a Non-XML Format FileUsing BULK INSERT and Keeping Identity Values with a Non-XML Format File

KEEPIDENTITYFORMATFILE 인수.KEEPIDENTITY and the FORMATFILE argument. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity; -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myIdentity.fmt',
        KEEPIDENTITY
        );

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;

서식 파일 없이 BULK INSERT 및 생성된 ID 값 사용Using BULK INSERT and Generated Identity Values without a Format File

기본값 사용.Using defaults. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ','
      );

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;

비 XML 서식 파일과 함께 BULK INSERT 및 생성된 ID 값 사용Using BULK INSERT and Generated Identity Values with a Non-XML Format File

기본값 및 FORMATFILE 인수 사용.Using defaults and FORMATFILE argument. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
BULK INSERT dbo.myIdentity
   FROM 'D:\BCP\myIdentity.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myIdentity.fmt'
        );

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;

비 XML 서식 파일과 함께 OPENROWSET(BULK...) 사용 및 ID 값 유지Using OPENROWSET(BULK...) and Keeping Identity Values with a Non-XML Format File

KEEPIDENTITY 테이블 힌트 및 FORMATFILE 인수.KEEPIDENTITY table hint and FORMATFILE argument. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
INSERT INTO dbo.myIdentity
WITH (KEEPIDENTITY) 
(PersonID, FirstName, LastName, BirthDate)
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myIdentity.bcp', 
        FORMATFILE = 'D:\BCP\myIdentity.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;

Using OPENROWSET(BULK...) and Generated Identity Values with a Non-XML Format FileUsing OPENROWSET(BULK...) and Generated Identity Values with a Non-XML Format File

기본값 및 FORMATFILE 인수 사용.Using defaults and FORMATFILE argument. Microsoft SSMS( SQL Server Management StudioSQL Server Management Studio )에서 다음 Transact-SQL을 실행합니다.Execute the following Transact-SQL in Microsoft SQL Server Management StudioSQL Server Management Studio (SSMS):

USE TestDatabase;
GO

TRUNCATE TABLE dbo.myIdentity;  -- for testing
INSERT INTO dbo.myIdentity
(FirstName, LastName, BirthDate)
    SELECT FirstName, LastName, BirthDate
    FROM OPENROWSET (
        BULK 'D:\BCP\myIdentity.bcp', 
        FORMATFILE = 'D:\BCP\myIdentity.fmt'  
        ) AS t1;

-- review results
SELECT * FROM TestDatabase.dbo.myIdentity;
  1. 필드 및 행 종결자 지정(SQL Server)Specify Field and Row Terminators (SQL Server)

  2. bcp를 사용하여 데이터 파일에 접두사 길이 지정(SQL Server)Specify Prefix Length in Data Files by Using bcp (SQL Server)

  3. bcp를 사용하여 파일 저장 유형 지정(SQL Server)Specify File Storage Type by Using bcp (SQL Server)

참고 항목See Also

BACKUP(Transact-SQL) BACKUP (Transact-SQL)
bcp 유틸리티 bcp Utility
BULK INSERT(Transact-SQL) BULK INSERT (Transact-SQL)
OPENROWSET(Transact-SQL) OPENROWSET (Transact-SQL)
테이블 힌트(Transact-SQL)Table Hints (Transact-SQL)
데이터를 가져오거나 내보내기 위한 서식 파일(SQL Server)Format Files for Importing or Exporting Data (SQL Server)