대량 가져오기 수행 중 Null 유지 또는 기본값 사용(SQL Server)Keep Nulls or Use Default Values During Bulk Import (SQL Server)

이 항목은 다음에 적용됩니다. 예SQL Server(2008부터)예Azure SQL Database예Azure SQL Data Warehouse 예병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

기본적으로 데이터를 테이블로 가져올 때 bcp 명령 및 BULK INSERT 문은 해당 테이블의 열에 대해 정의된 기본값을 유지합니다.By default, when data is imported into a table, the bcp command and BULK INSERT statement observe any defaults that are defined for the columns in the table. 예를 들어 데이터 파일에 null 필드가 있으면 열의 기본값이 대신 로드됩니다.For example, if there is a null field in a data file, the default value for the column is loaded instead. bcp 명령 및 BULK INSERT 문을 사용하면 Null 값을 유지하도록 지정할 수 있습니다.The bcp command and BULK INSERT statement both allow you to specify that nulls values be retained.

반대로 일반 INSERT 문은 기본값을 삽입하는 대신 Null 값을 유지합니다.In contrast, a regular INSERT statement retains the null value instead of inserting a default value. INSERT ... SELECT * FROM OPENROWSET(BULK...) 문은 일반 INSERT와 같은 기본 동작을 제공하지만 기본값 삽입에 대한 테이블 힌트를 추가로 지원합니다.The INSERT ... SELECT * FROM OPENROWSET(BULK...) statement provides the same basic behavior as regular INSERT but additionally supports a table hint for inserting the default values.

윤곽선Outline
Null 값 유지Keeping Null Values
INSERT ... SELECT * FROM OPENROWSET(BULK...)에서 기본값 사용Using Default Values with INSERT ... SELECT * FROM OPENROWSET(BULK...)
예제 테스트 조건Example Test Conditions
 ● 샘플 테이블 ● Sample Table
 ● 샘플 데이터 파일 ● Sample Data File
 ● 샘플 비 XML 서식 파일 ● Sample Non-XML Format File
대량 가져오기 수행 중 Null 유지 또는 기본값 사용Keep Nulls or Use Default Values During Bulk Import
 ● 서식 파일 없이 bcp 사용 및 Null 값 유지 ● Using bcp and Keeping Null Values without a Format File
 ● 비 XML 서식 파일과 함께 bcp 사용 및 Null 값 유지 ● Using bcp and Keeping Null Values with a Non-XML Format File
 ● 서식 파일 없이 bcp 사용 및 기본값 사용 ● Using bcp and Using Default Values without a Format File
 ● 비 XML 서식 파일과 함께 bcp 사용 및 기본값 사용 ● Using bcp and Using Default Values with a Non-XML Format File
 ● 서식 파일 없이 BULK INSERT 사용 및 Null 값 유지 ● Using BULK INSERT and Keeping Null Values without a Format File
 ● 비 XML 서식 파일과 함께 BULK INSERT 사용 및 Null 값 유지 ● Using BULK INSERT and Keeping Null Values with a Non-XML Format File
 ● 서식 파일 없이 BULK INSERT 사용 및 기본값 사용 ● Using BULK INSERT and Using Default Values without a Format File
 ● 비 XML 서식 파일과 함께 BULK INSERT 사용 및 기본값 사용 ● Using BULK INSERT and Using Default Values with a Non-XML Format File
 ● 비 XML 서식 파일과 함께 OPENROWSET(BULK...) 사용 및 Null 값 유지 ● Using OPENROWSET(BULK...) and Keeping Null Values with a Non-XML Format File
 ● 비 XML 서식 파일과 함께 OPENROWSET(BULK...) 사용 및 기본값 사용 ● Using OPENROWSET(BULK...) and Using Default Values with a Non-XML Format File

Null 값 유지Keeping Null Values

다음 한정자는 대량 가져오기 작업 중 테이블 열에 대한 기본값(있는 경우)을 상속하기보다는 데이터 파일의 빈 필드에 Null 값을 유지하도록 지정합니다.The following qualifiers specify that an empty field in the data file retains its null value during the bulk-import operation, rather than inheriting a default value (if any) for the table columns. OPENROWSET의 경우 기본적으로 대량 로드 작업에 지정되지 않은 열은 NULL로 설정됩니다.For OPENROWSET, by default, any columns that are not specified in the bulk-load operation are set to NULL.

CommandCommand 한정자Qualifier 한정자 유형Qualifier type
bcpbcp -k-k 스위치Switch
BULK INSERTBULK INSERT KEEPNULLS\KEEPNULLS\** 인수Argument
INSERT ... SELECT * FROM OPENROWSET(BULK...)INSERT ... SELECT * FROM OPENROWSET(BULK...) 해당 사항 없음N/A 해당 사항 없음N/A

\* BULK INSERT의 경우 기본값을 사용할 수 없으면 null 값을 허용하도록 테이블 열을 정의해야 합니다.\* For BULK INSERT, if default values are not available, the table column must be defined to allow null values.

참고

이러한 한정자는 대량 가져오기 명령을 통해 테이블에서 DEFAULT 정의 확인을 비활성화합니다.These qualifiers disable checking of DEFAULT definitions on a table by these bulk-import commands. 그러나 동시 INSERT 문의 경우 DEFAULT 정의가 있어야 합니다.However, for any concurrent INSERT statements, DEFAULT definitions are expected.

INSERT ... SELECT * FROM OPENROWSET(BULK...) SELECT * FROM OPENROWSET(BULK...)Using Default Values with INSERT ... SELECT * FROM OPENROWSET(BULK...)

데이터 파일의 빈 필드의 경우 해당 테이블 열에서 기본값(있는 경우)을 사용하도록 지정할 수 있습니다.You can specify that for an empty field in the data file, the corresponding table column uses its default value (if any). 기본값을 사용하려면 테이블 힌트 KEEPDEFAULTS를 사용하세요.To use default values, use the table hint KEEPDEFAULTS.

예제 테스트 조건Example Test Conditions

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

샘플 테이블Sample Table

아래 스크립트에서는 테스트 데이터베이스와 myNulls라는 테이블을 만듭니다.The script below creates a test database and a table named myNulls. 네 번째 테이블 열 Kids는 기본값을 갖습니다.Notice that the fourth table column, Kids, has a default value. 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.myNulls ( 
   PersonID smallint not null,
   FirstName varchar(25),
   LastName varchar(30),
   Kids varchar(13) DEFAULT 'Default Value',
   BirthDate date
   );

샘플 데이터 파일Sample Data File

메모장을 사용하여 빈 파일 D:\BCP\myNulls.bcp 를 만들고 아래 데이터를 삽입합니다.Using Notepad, create an empty file D:\BCP\myNulls.bcp and insert the data below. 세 번째 레코드, 네 번째 열에는 값이 없습니다.Note that there is no value in the third record, fourth column.

1,Anthony,Grosse,Yes,1980-02-23
2,Alica,Fatnowna,No,1963-11-14
3,Stella,Rosenhain,,1992-03-02

또는 다음 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 + 'MyNulls.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 '1,Anthony,Grosse,Yes,1980-02-23';
Add-Content -Path $bcpFile -Value '2,Alica,Fatnowna,No,1963-11-14';
Add-Content -Path $bcpFile -Value '3,Stella,Rosenhain,,1992-03-02';

#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 유틸리티 를 사용하여 myNulls.fmt의 스키마를 기반으로 비 xml 서식 파일 myNulls를 생성합니다.The following command will use the bcp utility to generate a non-xml format file, myNulls.fmt, based on the schema of myNulls. 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.myNulls format nul -c -f D:\BCP\myNulls.fmt -t, -T

REM Review file
Notepad D:\BCP\myNulls.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

서식 파일을 만드는 방법은 서식 파일 만들기(SQL Server)를 사용하세요.For more information about creating format files, see Create a Format File (SQL Server).

대량 가져오기 수행 중 Null 유지 또는 기본값 사용Keep Nulls or Use Default Values During Bulk Import

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

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

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

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

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

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

서식 파일 없이 bcp 함께 bcpUsing bcp and Keeping Null Values with a Non-XML Format File

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

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

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

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

서식 파일 없이 bcp 사용 및 기본값 사용Using bcp and Using Default Values without a Format File

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

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

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

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

서식 파일 없이 bcp 과 함께 bcpUsing bcp and Using Default Values with a Non-XML Format File

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

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

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

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

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

KEEPNULLS 인수.KEEPNULLS 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.myNulls; -- for testing
BULK INSERT dbo.myNulls
    FROM 'D:\BCP\myNulls.bcp'
    WITH (
        DATAFILETYPE = 'char',  
        FIELDTERMINATOR = ',',  
        KEEPNULLS
        );

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

서식 파일 없이 BULK INSERT 함께 bcpUsing BULK INSERT and Keeping Null Values with a Non-XML Format File

KEEPNULLSFORMATFILE 인수.KEEPNULLS 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.myNulls; -- for testing
BULK INSERT dbo.myNulls
   FROM 'D:\BCP\myNulls.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myNulls.fmt',
        KEEPNULLS
        );

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

서식 파일 없이 BULK INSERT 사용 및 기본값 사용Using BULK INSERT and Using Default Values without a Format File

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.myNulls;  -- for testing
BULK INSERT dbo.myNulls
   FROM 'D:\BCP\myNulls.bcp'
   WITH (
      DATAFILETYPE = 'char',  
      FIELDTERMINATOR = ','
      );

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

서식 파일 없이 BULK INSERT 과 함께 bcpUsing BULK INSERT and Using Default Values with a Non-XML Format File

FORMATFILE 인수.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.myNulls;  -- for testing
BULK INSERT dbo.myNulls
   FROM 'D:\BCP\myNulls.bcp'
   WITH (
        FORMATFILE = 'D:\BCP\myNulls.fmt'
        );

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

서식 파일 없이 OPENROWSET(BULK...) 함께 bcpUsing OPENROWSET(BULK...) and Keeping Null Values with a Non-XML Format File

FORMATFILE 인수.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.myNulls;  -- for testing
INSERT INTO dbo.myNulls
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myNulls.bcp', 
        FORMATFILE = 'D:\BCP\myNulls.fmt'  
        ) AS t1;

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

서식 파일 없이 OPENROWSET(BULK...) 과 함께 bcpUsing OPENROWSET(BULK...) and Using Default Values with a Non-XML Format File

KEEPDEFAULTS 테이블 힌트 및 FORMATFILE 인수.KEEPDEFAULTS 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.myNulls;  -- for testing
INSERT INTO dbo.myNulls
WITH (KEEPDEFAULTS) 
    SELECT *
    FROM OPENROWSET (
        BULK 'D:\BCP\myNulls.bcp', 
        FORMATFILE = 'D:\BCP\myNulls.fmt'  
        ) AS t1;

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

참고 항목See Also

BACKUP(Transact-SQL) BACKUP (Transact-SQL)
OPENROWSET(Transact-SQL) OPENROWSET (Transact-SQL)
bcp Utility bcp Utility
BULK INSERT(Transact-SQL) BULK INSERT (Transact-SQL)
테이블 힌트(Transact-SQL)Table Hints (Transact-SQL)