대량 가져오기 수행 중 Null 유지 또는 기본값 사용
기본적으로 데이터를 테이블로 가져올 때 bcp 명령 및 BULK INSERT 문은 해당 테이블의 열에 정의되어 있는 기본값을 유지합니다. 예를 들어 데이터 파일에 null 필드가 있으면 열의 기본값이 대신 로드됩니다. bcp 명령 및 BULK INSERT 문을 사용하면 Null 값을 유지하도록 지정할 수 있습니다.
반대로 일반 INSERT 문은 기본값을 삽입하는 대신 Null 값을 유지합니다. INSERT ... SELECT * FROM OPENROWSET(BULK...) 문은 일반 INSERT와 같은 기본 동작을 제공하지만 기본값 삽입에 대한 테이블 힌트를 추가로 지원합니다.
[!참고] 테이블 열을 건너뛰는 예제 서식 파일은 서식 파일을 사용하여 테이블 열 건너뛰기을 참조하십시오.
예제 테이블 및 데이터 파일
이 항목의 예를 실행하려면 예제 테이블 및 데이터 파일을 만들어야 합니다.
예제 테이블
이 예에서는 dbo 스키마의 AdventureWorks 예제 데이터베이스에서 MyTestDefaultCol2라는 이름의 테이블을 만들어야 합니다. 이 테이블을 만들려면 Microsoft SQL Server Management Studio 쿼리 편집기에서 다음을 실행합니다.
USE AdventureWorks;
GO
CREATE TABLE MyTestDefaultCol2
(Col1 smallint,
Col2 nvarchar(50) DEFAULT 'Default value of Col2',
Col3 nvarchar(50)
);
GO
두 번째 테이블 열 Col2
는 기본값을 가집니다.
예제 서식 파일
일부 대량 가져오기 예에서는 XML이 아닌 서식 파일(MyTestDefaultCol2-f-c.Fmt
)을 사용하는데 이 파일은 MyTestDefaultCol2
테이블과 정확히 일치합니다. 이 서식 파일을 만들려면 Microsoft Windows 명령 프롬프트에서 다음을 입력합니다.
bcp AdventureWorks..MyTestDefaultCol2 format nul -c -f C:\MyTestDefaultCol2-f-c.Fmt -t, -r\n -T
서식 파일을 만드는 방법은 서식 파일 만들기를 참조하십시오.
예제 데이터 파일
이 예에서는 예제 데이터 파일(MyTestEmptyField2-c.Dat
)을 사용하는데 이 파일은 두 번째 필드에 값이 없습니다. MyTestEmptyField2-c.Dat
데이터 파일에는 다음 레코드가 포함됩니다.
1,,DataField3
2,,DataField3
bcp 또는 BULK INSERT로 Null 값 유지
다음 한정자는 대량 가져오기 작업 중 테이블 열에 대한 기본값(있는 경우)을 상속하기보다는 데이터 파일의 빈 필드에 Null 값을 유지하도록 지정합니다.
명령 | 한정자 | 한정자 유형 |
---|---|---|
bcp |
-k |
Switch |
BULK INSERT |
KEEPNULLS1 |
Argument |
1 BULK INSERT의 경우 기본값을 사용할 수 없으면 테이블 열에서 Null 값을 허용하도록 정의해야 합니다.
[!참고] 이러한 한정자는 대량 가져오기 명령을 통해 테이블에서 DEFAULT 정의 확인을 비활성화합니다. 그러나 동시 INSERT 문의 경우 DEFAULT 정의가 있어야 합니다.
자세한 내용은 bcp 유틸리티 및 BULK INSERT(Transact-SQL)를 참조하십시오.
예
이 섹션의 예에서는 bcp 또는 BULK INSERT를 사용하여 대량 가져오기를 수행하고 Null 값을 유지합니다.
두 번째 테이블 열 Col2에는 기본값이 있습니다. 데이터 파일의 해당되는 필드에는 빈 문자열이 포함됩니다. 기본적으로 bcp 또는 BULK INSERT를 사용하여 이 데이터 파일에서 MyTestDefaultCol2 테이블로 데이터를 가져올 때 Col2의 기본값이 삽입되어 다음과 같은 결과가 생성됩니다.
|
|
|
|
|
|
"Default value of Col2
" 대신 "NULL
"을 삽입하려면 다음 bcp 및 BULK INSERT 예에서 예시한 대로 -k 스위치 또는 KEEPNULL 옵션을 사용해야 합니다.
bcp 사용 및 Null 값 유지
다음 예에서는 bcp 명령에서 Null 값을 유지하는 방법을 예시합니다. bcp 명령에는 다음 스위치가 포함됩니다.
스위치 | 설명 |
---|---|
-f |
해당 명령에서 서식 파일을 사용하도록 지정합니다. |
-k |
작업 시 삽입된 열에 기본값이 지정되지 않고 빈 열이 Null 값을 보유하도록 지정합니다. |
-T |
bcp 유틸리티가 트러스트된 연결을 통해 SQL Server로 연결되도록 지정합니다. |
Windows 명령 프롬프트에서 다음을 입력합니다.
bcp AdventureWorks..MyTestDefaultCol2 in C:\MyTestEmptyField2-c.Dat -f C:\MyTestDefaultCol2-f-c.Fmt -k -T
BULK INSERT 사용 및 Null 값 유지
다음 예에서는 BULK INSERT 문에서 KEEPNULLS 옵션을 사용하는 방법을 보여 줍니다. SQL Server Management Studio 쿼리 편집기 같은 쿼리 도구에서 다음을 실행합니다.
USE AdventureWorks;
GO
BULK INSERT MyTestDefaultCol2
FROM 'C:\MyTestEmptyField2-c.Dat'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = ',',
KEEPNULLS
);
GO
INSERT ... SELECT * FROM OPENROWSET(BULK...)를 사용하여 기본값 유지
기본적으로 대량 로드 작업에 지정되어 있지 않은 열은 INSERT ... SELECT * FROM OPENROWSET(BULK...)에 의해 Null로 설정됩니다. 그러나 데이터 파일의 빈 필드의 경우 해당 테이블 열에서 기본값(있는 경우)을 사용하도록 지정할 수 있습니다. 기본값을 사용하려면 다음 테이블 힌트를 지정하십시오.
명령 | 한정자 | 한정자 유형 |
---|---|---|
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH(KEEPDEFAULTS) |
테이블 힌트 |
[!참고] 자세한 내용은 INSERT(Transact-SQL), SELECT(Transact-SQL), OPENROWSET(Transact-SQL) 및 테이블 힌트(Transact-SQL)를 참조하십시오.
예
다음 INSERT ... SELECT * FROM OPENROWSET(BULK...) 예는 데이터를 대량으로 가져오고 기본값을 유지합니다.
이 예를 실행하려면 MyTestDefaultCol2 예제 테이블과 MyTestEmptyField2-c.Dat
데이터 파일을 만들고 MyTestDefaultCol2-f-c.Fmt
서식 파일을 사용해야 합니다. 이러한 예제를 만드는 방법은 이 항목의 앞 부분에 있는 "예제 테이블 및 데이터 파일"을 참조하십시오.
두 번째 테이블 열 Col2는 기본값을 가집니다. 데이터 파일의 해당되는 필드에는 빈 문자열이 포함됩니다. INSERT ... SELECT * FROM OPENROWSET(BULK...)가 이 데이터 파일의 필드를 MyTestDefaultCol2 테이블로 가져올 때 기본적으로 기본값 대신 Null이 Col2로 삽입됩니다. 이 기본 동작을 통해 다음과 같은 결과가 나타납니다.
|
|
|
|
|
|
"NULL
" 대신 기본값인 "Default value of Col2
" 를 삽입하려면 다음 예에서 예시하는 대로 KEEPDEFAULTS 테이블 힌트를 사용해야 합니다. SQL Server Management Studio 쿼리 편집기 같은 쿼리 도구에서 다음을 실행합니다.
USE AdventureWorks;
GO
INSERT INTO MyTestDefaultCol2
WITH (KEEPDEFAULTS)
SELECT *
FROM OPENROWSET(BULK 'C:\MyTestEmptyField2-c.Dat',
FORMATFILE='C:\MyTestDefaultCol2-f-c.Fmt'
) as t1 ;
GO
참고 항목
개념
대량 가져오기 수행 중 Null 유지 또는 기본값 사용
DEFAULT 정의 만들기 및 수정
관련 자료
BACKUP(Transact-SQL)
OPENROWSET(Transact-SQL)
bcp 유틸리티
BULK INSERT(Transact-SQL)
테이블 힌트(Transact-SQL)