bcp 유틸리티

업데이트: 2006년 12월 12일

bcp 유틸리티는 Microsoft SQL Server 2005 인스턴스와 사용자가 지정한 형식의 데이터 파일 간에 데이터를 대량 복사합니다. bcp 유틸리티를 사용하여 많은 수의 새 행을 SQL Server 테이블로 가져오거나 테이블에서 데이터 파일로 데이터를 내보낼 수 있습니다. queryout 옵션과 함께 사용하는 경우를 제외하고 이 유틸리티를 사용하는 데에는 Transact-SQL에 대한 지식이 필요하지 않습니다. 테이블로 데이터를 가져오려면 해당 테이블에 대해 만든 서식 파일을 사용하거나 이 테이블의 열에 적합한 테이블 구조와 데이터 형식을 알아야 합니다.

항목 링크 아이콘bcp 구문 표기 규칙에 대한 자세한 내용은 명령 프롬프트 유틸리티를 참조하십시오.

구문

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-n] [-c] [-N] [-w] [-V (60 | 65 | 70 | 80)] [-6] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-Sserver_name[\instance_name]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

인수

  • database_name
    지정한 테이블 또는 뷰가 있는 데이터베이스의 이름입니다. 이 인수를 지정하지 않으면 사용자의 기본 데이터베이스를 사용합니다.
  • owner
    테이블 또는 뷰의 소유자 이름입니다. 작업을 수행하는 사용자가 지정한 테이블 또는 뷰를 소유하고 있는 경우에는 owner를 생략할 수 있습니다. 작업을 수행하는 사용자가 지정한 테이블이나 뷰의 소유자가 아닌데도 owner를 지정하지 않으면 SQL Server 2005에서는 오류 메시지를 반환하고 작업을 취소합니다.
  • table_name
    SQL Server로 데이터를 가져올 때는(in) 대상 테이블의 이름이며 SQL Server에서 데이터를 내보낼 때는(out) 원본 테이블의 이름입니다.
  • view_name
    SQL Server로 데이터를 복사(in)할 때는 대상 뷰의 이름이며 SQL Server로부터 데이터를 복사(out)할 때는 원본 뷰의 이름입니다. 모든 열이 같은 테이블을 참조하는 뷰만 대상 뷰로 사용할 수 있습니다. 뷰에 데이터 복사 시 제한 사항에 대한 자세한 내용은 INSERT(Transact-SQL)를 참조하십시오.
  • "query"
    결과 집합을 반환하는 Transact-SQL 쿼리입니다. 쿼리가 COMPUTE 절이 지정된 SELECT 문처럼 여러 결과 집합을 반환하면, 첫째 결과 집합만 데이터 파일로 복사되고 나머지 결과 집합은 무시됩니다. 쿼리는 큰따옴표로 묶고 쿼리에 포함된 항목은 작은 따옴표로 묶습니다. 쿼리에서 데이터를 대량 복사할 때는 queryout도 지정해야 합니다.
  • in | out | queryout | format
    다음과 같이 대량 복사 방향을 지정합니다.

    • in은 파일에서 데이터베이스 테이블 또는 뷰로 복사합니다.

      [!참고] SQL Server 6.5에 포함된 bcp 유틸리티를 통해서는 sql_variant 또는 bigint 데이터 형식이 포함된 테이블로 데이터를 대량 복사할 수 없습니다.

    • out은 데이터베이스 테이블 또는 뷰에서 파일로 복사합니다. 데이터를 추출할 때 bcp 유틸리티는 빈 문자열을 null로 나타내고 null 문자열은 빈 문자열로 나타냅니다.

    • queryout은 쿼리로부터 복사하며 쿼리로부터 데이터를 대량 복사하는 경우에만 지정해야 합니다.

    • format-n, -c, -w, -6, -N 등의 지정된 옵션과 테이블 또는 뷰 구분 기호를 기준으로 서식 파일을 만듭니다. 데이터를 대량 복사하는 경우 bcp 명령은 서식 파일을 참조할 수 있으므로 대화형으로 서식 정보를 다시 입력할 필요가 없습니다. format 옵션에는 -f 옵션이 필요하며 XML 서식 파일을 만드는 경우 -x 옵션도 필요합니다. 자세한 내용은 서식 파일 만들기를 참조하십시오.

  • data_file
    데이터 파일의 전체 경로입니다. SQL Server로 데이터를 대량으로 가져오는 경우 데이터 파일에는 지정한 테이블 또는 뷰로 복사할 데이터가 포함됩니다. SQL Server에서 데이터를 대량으로 내보내는 경우 데이터 파일에는 테이블 또는 뷰에서 복사한 데이터가 포함됩니다. 데이터 파일 경로는 1에서 255자까지 포함할 수 있습니다. 데이터 파일에는 최대 2,147,483,647개의 행을 포함할 수 있습니다.

    ms162802.note(ko-kr,SQL.90).gif중요:
    format 옵션에 대해 data_file (formatnul) 값으로 nul을 지정해야 합니다.
  • -mmax_errors
    bcp 작업이 취소되는 최대 구문 오류 발생 횟수를 지정합니다. 구문 오류란 대상 데이터 형식으로의 데이터 변환 오류를 나타냅니다. 총 max_errors 수에는 제약 조건 위반과 같이 서버에서만 검색할 수 있는 오류는 제외됩니다.

    bcp 유틸리티가 복사할 수 없는 행은 무시되며 오류가 하나 발생한 것으로 간주됩니다. 이 옵션을 지정하지 않은 경우의 기본값은 10입니다.

    [!참고] -m 옵션은 money 또는 bigint 데이터 형식 변환에는 적용되지 않습니다.

  • -fformat_file
    서식 파일의 전체 경로를 지정합니다. 다음과 같이 이 옵션의 의미는 사용되는 환경에 따라 다릅니다.

    • format 옵션과 함께 -f를 사용하는 경우 지정한 테이블 또는 뷰에 대해 지정한 format_file이 생성됩니다. XML 서식 파일을 만들려면 -x 옵션도 지정합니다. 자세한 내용은 서식 파일 만들기를 참조하십시오.

    • -fin 또는 out 옵션과 함께 사용하는 경우 기존 서식 파일이 필요합니다.

      [!참고] 원할 경우 in 또는 out 옵션과 함께 서식 파일을 사용할 수도 있습니다. -f 옵션이 없을 경우 -n, -c, -w, -6 또는 -N을 지정하지 않으면 명령에서 서식 정보를 묻는 메시지를 표시하며 응답 내용을 서식 파일에 저장할 수 있습니다. 이 서식 파일의 기본 이름은 Bcp.fmt입니다.

  • -x
    format-fformat_file 옵션과 함께 사용되며 기본 비 XML 서식 파일 대신 XML 기반 서식 파일을 생성합니다. 데이터를 가져오거나 내보낼 때 -x는 작동하지 않습니다. format-fformat_file 모두와 함께 사용하지 않으면 오류가 생성됩니다.

    [!참고] -x 스위치를 사용하려면 bcp 9.0 클라이언트를 사용해야 합니다. bcp 9.0 클라이언트를 사용하는 방법은 이 항목의 뒷부분에 나오는 "주의"를 참조하십시오.

  • -eerr_file
    bcp 유틸리티가 파일에서 데이터베이스로 전송할 수 없는 행을 저장하는 데 사용되는 오류 파일의 전체 경로를 지정합니다. bcp 명령의 오류 메시지는 사용자의 워크스테이션에 나타납니다. 이 옵션을 사용하지 않으면 오류 파일이 생성되지 않습니다.
  • -Ffirst_row
    테이블에서 내보내거나 데이터 파일에서 가져올 첫 번째 행 번호를 지정합니다. 이 매개 변수에는 0보다 크고(>) 총 행 수보다 작거나(<) 같은(=) 값을 지정해야 합니다. 이 매개 변수를 지정하지 않을 경우 기본값은 파일의 첫 번째 행입니다.
  • -Llast_row
    테이블에서 내보내거나 데이터 파일에서 가져올 마지막 행 번호를 지정합니다. 이 매개 변수에는 0보다 크고(>) 마지막 행 번호보다 작거나(<) 같은(=) 값을 지정해야 합니다. 이 매개 변수를 지정하지 않을 경우 기본값은 파일의 마지막 행입니다.
  • -bbatch_size
    가져온 데이터의 일괄 처리당 행 수를 지정합니다. 각 일괄 처리를 커밋되기 전에 전체 일괄 처리를 가져오는 별도의 트랜잭션으로 가져오고 기록됩니다. 기본적으로 데이터 파일의 모든 행은 하나의 일괄 처리로 가져와집니다. 여러 일괄 처리에 행을 배포하려면 데이터 파일의 행 수보다 작은 batch_size를 지정합니다. 일괄 처리에 대한 트랜잭션이 하나라도 실패하면 현재 일괄 처리에서 삽입한 내용만 롤백됩니다. 커밋된 트랜잭션으로 이미 가져온 일괄 처리는 나중에 발생한 오류의 영향을 받지 않습니다.

    이 옵션을 **h"**ROWS_PER_BATCH =bb" 옵션과 함께 사용하지 마십시오.

    자세한 내용은 대량 가져오기를 위한 일괄 처리 관리를 참조하십시오.

  • -c
    문자 데이터 형식을 사용하여 작업을 수행합니다. 이 옵션은 각 필드에 대한 정보를 요청하지 않습니다. 이 옵션은 char를 저장 유형으로 사용하고 접두사를 사용하지 않으며 \t(탭 문자)를 필드 구분 기호로 사용하고 \r\n(줄 바꿈 문자)을 행 종료 문자로 사용합니다.

    자세한 내용은 데이터를 가져오거나 내보낼 때 문자 형식 사용을 참조하십시오.

  • -N
    문자가 아닌 데이터의 경우는 데이터의 원시(데이터베이스) 데이터 형식을 사용하고 문자 데이터의 경우는 유니코드 문자를 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 -w 옵션을 사용할 때보다 성능이 높으며 데이터 파일을 사용하여 SQL Server 인스턴스 간에 데이터를 전송할 때 사용할 수 있습니다. 이 옵션은 각 필드에 대한 정보를 요청하지 않습니다. ANSI 확장 문자가 들어 있는 데이터를 전송하거나 네이티브 모드의 성능을 활용하려고 할 때 이 옵션을 사용하십시오. -N은 SQL Server 6.5 이하 버전에 사용할 수 없습니다.

    자세한 내용은 데이터를 가져오거나 내보내기 위해 유니코드 네이티브 형식 사용을 참조하십시오.

  • -w
    유니코드 문자를 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 각 필드에 대한 정보를 요청하지 않습니다. 이 옵션은 nchar를 저장 유형으로 사용하고 접두사를 사용하지 않으며 \t(탭 문자)를 필드 구분 기호로 사용하고 \n(줄 바꿈 문자)을 행 종료 문자로 사용합니다. 이 옵션은 SQL Server 6.5 이하 버전에 사용할 수 없습니다.

    자세한 내용은 유니코드 문자 형식을 사용하여 데이터 가져오기 및 내보내기를 참조하십시오.

  • -V ( 60| 65| 70| 80)
    이전 SQL Server 버전의 데이터 형식을 사용하여 대량 복사 작업을 수행합니다. 이 옵션이 각 필드마다 표시되지는 않습니다. 이 옵션은 기본값을 사용합니다. 예를 들어 SQL Server 6.5의 bcp 유틸리티(ODBC에서는 더 이상 지원하지 않음)가 지원하는 날짜 형식을 SQL Server 2005로 대량 복사하려면 -V65 매개 변수를 사용합니다.

    ms162802.note(ko-kr,SQL.90).gif중요:
    SQL Server에서 데이터 파일로 데이터를 대량으로 내보내는 경우 -V를 지정해도 bcp 유틸리티는 datetime 또는 smalldatetime 데이터에 대해 SQL Server 6.0 또는 SQL Server 6.5 날짜 형식을 생성하지 않습니다. 날짜는 항상 ODBC 형식으로 작성됩니다. 또한 SQL Server 6.5 이하 버전이 null을 허용하는 bit 데이터를 지원하지 않기 때문에 bit 열의 null 값은 0으로 기록됩니다.

    자세한 내용은 SQL Server 이전 버전으로부터 네이티브 및 문자 형식 데이터 가져오기를 참조하십시오.

  • -6
    SQL Server 6.0 또는 SQL Server 6.5 데이터 형식을 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 이전 버전과의 호환성을 위해서만 지원됩니다. SQL Server 7 이상 버전에서는 대신 -V 옵션을 사용합니다.
  • -q
    bcp 유틸리티와 SQL Server 인스턴스 간의 연결에서 SET QUOTED_IDENTIFIERS ON 문을 실행합니다. 이 옵션을 사용하여 공백이나 작은따옴표를 포함하는 데이터베이스, 소유자, 테이블 또는 뷰 이름을 지정합니다. 세 부분으로 구성된 테이블 이름이나 뷰 이름 전체를 큰따옴표("")로 묶습니다.

    공백이나 작은따옴표가 들어 있는 데이터베이스 이름을 지정하려면 -q 옵션을 사용해야 합니다.

    자세한 내용은 이 항목의 뒷부분에 나오는 주의를 참조하십시오.

  • -C { ACP | OEM | RAW | code_page }
    SQL Server 이전 버전과의 호환성을 위해 지원됩니다. SQL Server 7.0 이상 버전의 경우 Microsoft는 서식 파일의 각 열에 데이터 정렬 이름을 지정하는 것을 권장합니다.

    데이터 파일에 있는 데이터의 코드 페이지를 지정합니다. code_page는 데이터가 127보다 크거나 32보다 작은 문자 값을 가진 char, varchar 또는 text 열을 포함하는 경우에만 적용됩니다.

    코드 페이지 값 설명

    ACP

    ANSI/Microsoft Windows(ISO 1252)입니다.

    OEM

    클라이언트가 사용하는 기본 코드 페이지입니다. -C를 지정하지 않은 경우 사용되는 기본 코드 페이지입니다.

    RAW

    코드 페이지 간 변환이 일어나지 않습니다. 변환이 일어나지 않으므로 가장 빠른 옵션입니다.

    code_page

    850과 같은 특정 코드 페이지 번호입니다.

    자세한 내용은 서로 다른 데이터 정렬 간의 데이터 복사를 참조하십시오.

  • -tfield_term
    필드 종료 문자를 지정합니다. 기본값은 \t(탭 문자)입니다. 이 매개 변수를 사용하면 기본 필드 종료 문자보다 우선 적용됩니다. 자세한 내용은 필드 및 행 종결자 지정을 참조하십시오.
  • -rrow_term
    행 종료 문자를 지정합니다. 기본값은 \n(줄바꿈 문자)입니다. 이 매개 변수를 사용하면 기본 행 종료 문자보다 우선 적용됩니다. 자세한 내용은 필드 및 행 종결자 지정을 참조하십시오.
  • -Iinput_file
    대화형 모드(-n, -c, -w, -6 또는 -N을 지정하지 않음)를 사용하여 대량 복사를 수행할 때 각 데이터 필드에 대한 명령 프롬프트 질문의 응답이 포함된 응답 파일의 이름을 지정합니다.
  • -ooutput_file
    명령 프롬프트에서 리디렉션된 출력을 받는 파일의 이름을 지정합니다.
  • -apacket_size
    서버에서 또는 서버로 보내는 네트워크 패킷당 바이트 수를 지정합니다. SQL Server Management Studio 또는 sp_configure 시스템 저장 프로시저를 사용하여 서버 구성 옵션을 설정할 수도 있습니다. 그러나 이 옵션을 사용하여 서버 구성 옵션을 개별적으로 무시할 수 있습니다. packet_size는 4096부터 65535바이트가 될 수 있고 기본값은 4096입니다.

    패킷 크기가 커지면 대량 복사 작업의 성능이 향상될 수 있습니다. 더 큰 패킷을 요청했는데 허용되지 않으면 기본값이 사용됩니다. bcp 유틸리티가 생성하는 성능 통계에 사용되는 패킷의 크기가 나타납니다.

  • -Sserver_name[ **\instance_name]
    연결할 SQL Server 인스턴스를 지정합니다. 서버를 지정하지 않으면 bcp 유틸리티가 로컬 컴퓨터에 있는 SQL Server의 기본 인스턴스에 연결됩니다. 네트워크의 원격 컴퓨터나 명명된 로컬 인스턴스에서 bcp 명령을 실행할 때 이 옵션을 지정해야 합니다. 서버에 있는 기본 SQL Server 인스턴스에 연결하려면 server_name만 지정합니다. 명명된 SQL Server 2005 인스턴스에 연결하려면 server_name
    \**instance_name을 지정합니다.
  • -Ulogin_id
    SQL Server 연결에 사용하는 로그인 ID를 지정합니다.

    ms162802.security(ko-kr,SQL.90).gif보안 정보:
    bcp 유틸리티에서 통합 보안을 사용하는 트러스트된 연결을 통해 SQL Server에 연결하는 경우 user namepassword를 조합하여 사용하는 대신 -T 옵션(트러스트된 연결)을 사용합니다.
  • -Ppassword
    로그인 ID에 해당하는 암호를 지정합니다. 이 옵션을 사용하지 않으면 bcp 명령에서 암호를 묻는 메시지를 표시합니다. 암호를 지정하지 않고 명령 프롬프트의 마지막에 이 옵션을 사용하면 bcp가 기본 암호(NULL)를 사용합니다.

    ms162802.security(ko-kr,SQL.90).gif보안 정보:
    빈 암호를 사용하지 마십시오. 강력한 암호를 사용하십시오.

    암호를 마스킹하려면 -U 옵션과 함께 -P 옵션을 지정하지 마십시오. 대신 -U 옵션 및 기타 스위치와 함께 bcp를 지정한 후 -P를 지정하지 말고 Enter 키를 누릅니다. 그러면 암호를 묻는 메시지가 나타납니다. 이 방법을 사용하면 암호 입력 시 암호가 마스킹됩니다.

  • -T
    bcp 유틸리티가 통합 보안을 사용하는 트러스트된 연결을 통해 SQL Server로 연결되도록 지정합니다. 네트워크 사용자의 보안 자격 증명, login_idpassword는 필요하지 않습니다. -T를 지정하지 않은 경우 성공적으로 로그인하려면 -U-P를 지정해야 합니다.
  • -v
    bcp 유틸리티 버전 번호 및 저작권을 나타냅니다.
  • -R
    클라이언트 컴퓨터의 로캘 설정에 정의된 국가별 형식을 사용하여 통화, 날짜 및 시간 데이터를 SQL Server로 대량 복사하도록 지정합니다. 기본적으로 국가별 설정은 무시됩니다.
  • -E
    가져온 데이터 파일의 ID 값이 ID 열에 사용되도록 지정합니다. -E를 지정하지 않으면 가져오는 데이터 파일에 있는 이 열의 ID 값이 무시되고 SQL Server 2005에서 테이블을 만들 때 지정한 초기값 및 증가값을 기반으로 고유 값을 자동으로 할당합니다.

    데이터 파일에 테이블이나 뷰의 ID 열 값이 포함되지 않은 경우 서식 파일을 사용하여 데이터를 가져올 때 테이블이나 뷰의 ID 열을 생략하도록 지정합니다. SQL Server 2005에서 해당 열에 자동으로 고유 값을 할당합니다. 자세한 내용은 DBCC CHECKIDENT(Transact-SQL)를 참조하십시오.

    -E 옵션을 사용하려면 특별한 권한이 있어야 합니다. 자세한 내용은 이 항목의 뒷부분에 나오는 "주의"를 참조하십시오.

    ID 값을 유지하는 방법은 데이터 대량 가져오기 중 ID 값 유지를 참조하십시오.

  • **-h"**hint[ ,... n] "
    데이터를 테이블 또는 뷰로 대량으로 가져올 때 사용할 힌트를 지정합니다. 데이터를 SQL Server 6.x 이하 버전으로 대량 복사할 때는 이 옵션을 사용할 수 없습니다.

    • ORDER**(column[ASC | DESC] [,...n])**
      데이터 파일에 있는 데이터의 정렬 순서입니다. 가져올 데이터를 테이블의 클러스터형 인덱스(있는 경우)에 따라 정렬하면 대량 가져오기 성능이 향상됩니다. 데이터 파일을 클러스터형 인덱스 키와 다른 순서로 정렬하거나 테이블에 클러스터형 인덱스가 없으면 ORDER 절이 무시됩니다. 지정한 열 이름은 대상 테이블에서 올바른 열 이름이어야 합니다. 기본적으로 bcp는 데이터 파일이 정렬되지 않은 것으로 간주합니다. 대량 가져오기 작업을 최적화하기 위해 SQL Server에서는 가져온 데이터가 정렬되어 있는지도 확인합니다.

      자세한 내용은 데이터 대량 가져오기 중 정렬 순서 제어를 참조하십시오.

    • ROWS_PER_BATCH **=**bb
      일괄 처리당 데이터 행 수(bb)입니다. -b를 지정하지 않은 경우에 사용되며 전체 데이터 파일을 하나의 트랜잭션으로 서버에 보냅니다. 서버는 bb 값에 따라 대량 로드를 최적화합니다. 기본적으로 ROWS_PER_BATCH는 알 수 없습니다.

      자세한 내용은 대량 가져오기를 위한 일괄 처리 관리를 참조하십시오.

    • TABLOCK
      대량 로드 작업이 진행되는 동안 대량 업데이트 테이블 수준 잠금이 사용되도록 지정합니다. 그렇지 않으면 행 수준 잠금이 사용됩니다. 대량 복사 작업 동안 잠금을 사용하면 테이블의 잠금 경쟁을 줄이기 때문에 이 힌트를 사용하면 성능이 크게 향상됩니다. 테이블에 인덱스가 없고 TABLOCK이 지정되어 있으면 여러 클라이언트가 동시에 테이블을 로드할 수 있습니다. 기본적으로 잠금 동작은 table lock on bulk load 테이블 옵션에 의해 결정됩니다.

      자세한 내용은 대량 가져오기를 위한 잠금 동작 제어를 참조하십시오.

    • CHECK_CONSTRAINTS
      대량 가져오기 작업 중 대상 테이블 또는 뷰의 모든 제약 조건을 검사하도록 지정합니다. CHECK_CONSTRAINTS 힌트를 지정하지 않으면 모든 CHECK 및 FOREIGN KEY 제약 조건이 무시되며 작업 후 테이블의 제약 조건은 트러스트되지 않는 것으로 표시됩니다.

      [!참고] UNIQUE, PRIMARY KEY 및 NOT NULL 제약 조건은 항상 적용됩니다.

      어느 시점에서는 전체 테이블의 제약 조건을 확인할 필요가 있습니다. 대량 가져오기 작업을 수행하기 전에 테이블이 비어 있지 않은 경우 제약 조건의 유효성을 다시 검사하는 비용이 증분 데이터에 CHECK 제약조건을 적용하는 비용을 초과할 수 있습니다. 그러므로 일반적으로 증분 대량 가져오기 중 제약 조건을 검사하도록 설정하는 것이 좋습니다.

      입력 데이터에 제약 조건을 위반하는 행이 포함된 경우에는 제약 조건을 사용하지 않을 수 있습니다(기본 동작). CHECK 제약 조건을 사용하지 않으면 데이터를 가져온 다음 Transact-SQL 문을 사용하여 잘못된 데이터를 제거할 수 있습니다.

      [!참고] SQL Server 2005에서 bcp는 새 데이터 유효성 검사 및 데이터 검사를 강제로 실행합니다. 이로 인해 기존 스크립트를 데이터 파일의 잘못된 데이터에 대해 실행할 때 오류가 발생할 수도 있습니다.

      [!참고] -mmax_errors 스위치는 제약 조건 검사에 적용되지 않습니다.

      자세한 내용은 대량 가져오기 작업으로 제약 조건 검사 제어를 참조하십시오.

    • FIRE_TRIGGERS
      in 인수와 함께 지정하면 대량 복사 작업 동안 대상 테이블에 정의한 삽입 트리거가 실행됩니다. FIRE_TRIGGERS를 지정하지 않으면 삽입 트리거가 실행되지 않습니다. out, queryoutformat 인수의 경우 FIRE_TRIGGERS는 무시됩니다.

      자세한 내용은 데이터 대량 가져오기 작업 시의 트리거 실행 제어를 참조하십시오.

주의

시스템에 Microsoft SQL Server 도구를 설치하면 bcp 9.0 클라이언트가 설치됩니다. SQL Server 2005 및 SQL Server 2000 도구가 모두 설치된 경우 PATH 환경 변수의 값에 따라 bcp 9.0 클라이언트 대신 이전 bcp 클라이언트를 사용게 될 수 있습니다. 이 환경 변수는 실행 파일을 검색하기 위해 Windows에서 사용하는 디렉터리 집합을 정의합니다. 사용 중인 버전을 확인하려면 Windows 명령 프롬프트에서 bcp/v 명령을 실행합니다. PATH 환경 변수에서 명령 경로를 설정하는 방법은 Windows 도움말을 참조하십시오.

XML 형식 파일은 SQL 네이티브 클라이언트와 함께 SQL Server 도구를 설치한 경우에만 지원됩니다.

bcp 유틸리티의 위치 또는 실행 방법과 명령 프롬프트 유틸리티 구문 표기 규칙에 대한 자세한 내용은 명령 프롬프트 유틸리티를 참조하십시오.

대량 가져오기 또는 내보내기 작업을 위해 데이터를 준비하는 방법에 대한 자세한 내용은 대량 내보내기 또는 가져오기를 위한 데이터 준비를 참조하십시오.

대량 가져오기로 수행된 행 삽입 작업이 트랜잭션 로그에 기록되는 경우에 대한 자세한 내용은 대량 가져오기의 최소 로깅을 위한 선행 조건을 참조하십시오.

계산 열 및 타임스탬프 열

가져올 데이터 파일에 있는 계산 열 또는 timestamp 열의 값은 무시되며 SQL Server 2005에서 자동으로 이 값을 할당합니다. 데이터 파일의 테이블에 계산 열 또는 timestamp 열의 값이 없으면 데이터를 가져올 때 서식 파일을 사용하여 테이블에 있는 계산 열 또는 timestamp 열을 건너뛰도록 지정합니다. SQL Server에서는 해당 열에 자동으로 값을 할당합니다.

계산 열 및 timestamp 열은 보통 때와 같이 SQL Server에서 데이터 파일로 대량 복사됩니다.

공백 또는 따옴표를 포함하는 식별자 지정

SQL Server 식별자에 중간 공백이나 따옴표와 같은 문자를 포함할 수 있습니다. 이러한 식별자는 다음과 같이 처리해야 합니다.

  • 명령 프롬프트에서 공백 또는 따옴표가 포함된 식별자나 파일 이름을 지정할 때는 식별자를 큰따옴표("")로 묶습니다.
    예를 들어 다음 bcp out 명령은 Currency Types.dat라는 데이터 파일을 만듭니다.

    bcp AdventureWorks.Sales.Currency out "Currency Types.dat" -T -c
    
  • 공백 또는 따옴표를 포함하는 데이터베이스 이름을 지정하려면 q 옵션을 사용해야 합니다.

  • 중간 공백이나 따옴표가 포함된 소유자, 테이블 또는 뷰 이름을 지정하려면 다음 중 하나를 수행합니다.

    • -q 옵션을 지정합니다. 또는
    • 따옴표 안에서 소유자, 테이블 또는 뷰 이름을 대괄호([])로 묶습니다.

데이터 유효성 검사

SQL Server 2005에서 bcp는 새 데이터 유효성 검사 및 데이터 검사를 강제로 실행합니다. 이로 인해 기존 스크립트를 데이터 파일의 잘못된 데이터에 대해 실행할 때 오류가 발생할 수도 있습니다. 예를 들어 bcp는 이제 다음을 확인합니다.

  • float 또는 real 데이터 형식의 네이티브 표시가 유효한지 여부
  • 유니코드 데이터의 길이가 짝수 바이트인지 여부

이제는 이전 버전의 SQL Server에서 대량으로 가져올 수 있는 잘못된 데이터 형식을 로드할 수 없지만 이전 버전에서는 클라이언트가 잘못된 데이터에 액세스해야 오류가 발생했습니다. 추가 유효성 검사를 수행하면 대량 로드 이후 데이터를 쿼리할 때 발생할 수 있는 예상치 못한 문제가 최소화됩니다.

SQLXML 문서 대량 내보내기 또는 가져오기

SQLXML 데이터를 대량으로 내보내거나 가져오려면 서식 파일에서 다음 데이터 형식 중 하나를 사용합니다.

데이터 형식 효과

SQLCHAR 또는 SQLVARYCHAR

데이터를 클라이언트 코드 페이지나 데이터 정렬에 포함된 코드 페이지로 보냅니다. 이는 서식 파일을 지정하지 않고 -c 스위치를 지정하는 것과 효과가 동일합니다.

SQLNCHAR 또는 SQLNVARCHAR

데이터를 유니코드로 보냅니다. 이는 서식 파일을 지정하지 않고 -w 스위치를 지정하는 것과 효과가 동일합니다.

SQLBINARY 또는 SQLVARYBIN

데이터를 변환하지 않고 보냅니다.

사용 권한

bcpout 작업을 수행하려면 원본 테이블에 대한 SELECT 권한이 있어야 합니다.

bcpin 작업을 수행하려면 적어도 대상 테이블에 대한 SELECT/INSERT 권한이 있어야 합니다. 또한 다음과 같은 경우 ALTER TABLE 권한이 있어야 합니다.

  • 제약 조건이 있으며 CHECK_CONSTRAINTS 힌트가 지정되지 않았습니다.

    [!참고] 기본적으로 제약 조건은 사용하지 않습니다. 제약 조건을 명시적으로 사용하려면 CHECK_CONSTRAINTS 힌트와 함께 -h 옵션을 사용합니다.

  • 트리거가 있으며 FIRE_TRIGGER 힌트가 지정되지 않았습니다.

    [!참고] 기본적으로 트리거는 실행되지 않습니다. 트리거를 명시적으로 실행하려면 FIRE_TRIGGERS 힌트와 함께 -h 옵션을 사용합니다.

  • -E 옵션을 사용하여 데이터 파일에서 ID 값을 가져옵니다.

[!참고] SQL Server 2005에서 처음으로 대상 테이블에 대한 ALTER TABLE 권한이 필요해진 것입니다. 이 요구 사항으로 인해 사용자 계정에 대상 테이블에 대한 ALTER 테이블 권한이 없을 경우 트리거 및 제약 조건 검사를 실행하지 않는 bcp 스크립트가 실패할 수 있습니다.

이 섹션에서는 다음과 같은 예를 보여 줍니다.

  • 1. 데이터 파일로 테이블 행 복사(트러스트된 연결 사용)
  • 2. 데이터 파일로 테이블 행 복사(혼합 모드 인증 사용)
  • 3. 파일에서 테이블로 데이터 복사
  • 4. 데이터 파일로 특정 열 복사
  • 5. 데이터 파일로 특정 행 복사
  • 6. 쿼리에서 데이터 파일로 데이터 복사
  • 7. 비 XML 서식 파일 만들기
  • 8. XML 서식 파일 만들기
  • 9. bcp에서 서식 파일을 사용하여 대량 가져오기 수행

1. 데이터 파일로 테이블 행 복사(트러스트된 연결 사용)

다음 예에서는 AdventureWorks.Sales.Currency 테이블의 out 옵션을 설명합니다. 이 예에서는 Currency.dat라는 데이터 파일을 만들고 문자 형식을 사용하여 테이블 데이터를 파일에 복사합니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp AdventureWorks.Sales.Currency out Currency.dat -T -c

2. 데이터 파일로 테이블 행 복사(혼합 모드 인증 사용)

다음 예에서는 AdventureWorks.Sales.Currency 테이블의 out 옵션을 설명합니다. 이 예에서는 Currency.dat라는 데이터 파일을 만들고 문자 형식을 사용하여 테이블 데이터를 파일에 복사합니다.

이 예에서는 혼합 모드 인증을 사용하고 있다고 가정하며 -U 스위치를 사용하여 로그인 ID를 지정해야 합니다. 또한 로컬 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결하지 않는 한 -S 스위치를 사용하여 시스템 이름을 지정하고 원하는 경우 인스턴스 이름을 지정합니다.

bcp AdventureWorks.Sales.Currency out Currency.dat -c -U<login_id> -S<server_name\instance_name>

시스템에서 암호를 묻는 메시지를 표시합니다.

3. 파일에서 테이블로 데이터 복사

다음 예에서는 앞의 예에서 만든 Currency.dat 파일을 사용하여 in 옵션을 설명합니다. 그러나 먼저 이 예에서는 데이터를 복사해 넣을 빈 AdventureWorks Sales.Currency 테이블 복사본 Sales.Currency2를 만듭니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

빈 테이블을 만들려면 쿼리 편집기에서 다음 명령을 입력합니다.

USE AdventureWorks;
GO
SELECT * INTO AdventureWorks.Sales.Currency2 
FROM AdventureWorks.Sales.Currency WHERE 1=2

문자 데이터를 새 테이블로 대량 복사하려면 즉, 데이터를 가져오려면 명령 프롬프트에서 다음 명령을 입력합니다.

bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -c

명령이 성공적으로 실행되었는지 확인하려면 쿼리 편집기에서 테이블 내용을 표시하고 다음을 입력합니다.

USE AdventureWorks;
GO
SELECT * FROM Sales.Currency2

4. 데이터 파일로 특정 열 복사

특정 열을 복사하려면 queryout 옵션을 사용합니다. 다음 예에서는 Sales.Currency 테이블의 Name 열만 데이터 파일로 복사합니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

5. 데이터 파일로 특정 행 복사

특정 행을 복사하려면 queryout 옵션을 사용합니다. 다음 예에서는 Jarrod Rana라는 연락처 행만 AdventureWorks.Person.Contact 테이블에서 데이터 파일(Jarrod Rana.dat)로 복사합니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp "SELECT * FROM AdventureWorks.Person.Contact WHERE FirstName='Jarrod' AND LastName='Rana' "  queryout "Jarrod Rana.dat" -T -c

6. 쿼리에서 데이터 파일로 데이터 복사

Transact-SQL 문의 결과 집합을 데이터 파일로 복사하려면 queryout 옵션을 사용합니다. 다음 예에서는 AdventureWorks.Person.Contact 테이블에서 성과 이름을 기준으로 정렬된 이름을 Contacts.txt 데이터 파일로 복사합니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp "SELECT FirstName, LastName FROM AdventureWorks.Person.Contact ORDER BY LastName, Firstname" queryout Contacts.txt -c -T

7. 비 XML 서식 파일 만들기

다음 예에서는 AdventureWorks 데이터베이스의 Sales.Currency 테이블에 대해 Currency.fmt라는 비 XML 서식 파일을 만듭니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp AdventureWorks.Sales.Currency format nul -T -c  -f Currency.fmt

자세한 내용은 비-XML 서식 파일 이해를 참조하십시오.

8. XML 서식 파일 만들기

다음 예에서는 AdventureWorks 데이터베이스의 Sales.Currency 테이블에 대해 Currency.xml이라는 XML 서식 파일을 만듭니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp AdventureWorks.Sales.Currency format nul -T -c -x -f Currency.xml

[!참고] -x 스위치를 사용하려면 bcp 9.0 클라이언트를 사용해야 합니다. bcp 9.0 클라이언트를 사용하는 방법은 "주의"를 참조하십시오.

자세한 내용은 XML 서식 파일 이해를 참조하십시오.

9. bcp에서 서식 파일을 사용하여 대량 가져오기 수행

SQL Server 인스턴스로 데이터를 가져올 때 이전에 만든 서식 파일을 사용하려면 in 옵션과 함께 -f 스위치를 사용합니다. 예를 들어 다음 명령은 이전에 만든 서식 파일인 Currency.xml을 사용하여 데이터 파일 Currency.dat의 내용을 Sales.Currency 테이블의 복사본인 Sales.Currency2로 대량 복사합니다. 이 예에서는 Windows 인증을 사용하고 있고 bcp 명령을 실행 중인 서버 인스턴스에 트러스트된 연결을 설정하고 있다고 가정합니다.

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

bcp AdventureWorks.Sales.Currency2 in Currency.dat -T -f Currency.xml

[!참고] 데이터 파일 필드와 테이블 열의 숫자, 순서, 데이터 형식 등이 다른 경우 서식 파일을 사용하면 유용합니다. 자세한 내용은 데이터를 가져오거나 내보내기 위한 서식 파일을 참조하십시오.

추가 예

다음 항목에서는 bcp를 사용하는 예를 보여 줍니다.

참고 항목

관련 자료

대량 내보내기 또는 가져오기를 위한 데이터 준비
BULK INSERT(Transact-SQL)
OPENROWSET(Transact-SQL)
테이블 수준 잠금으로 데이터를 병렬로 가져오기
SET QUOTED_IDENTIFIER(Transact-SQL)
sp_configure(Transact-SQL)
sp_tableoption(Transact-SQL)
데이터를 가져오거나 내보내기 위한 데이터 형식
데이터를 가져오거나 내보내기 위한 서식 파일
대량 가져오기 성능 최적화
대량 가져오기 및 내보내기 작업 정보
데이터 대량 가져오기 및 내보내기 시나리오

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

변경된 내용
  • CHECK_CONSTRAINTS 힌트를 지정하지 않으면 CHECK 및 FOREIGN KEY 제약 조건이 함께 무시된다고 CHECK_CONSTRAINTS에 대한 설명을 수정했습니다.

2006년 7월 17일

새로운 내용
  • ORDER 인수에 대한 설명을 업데이트했습니다.
  • bcp 예를 포함하는 항목에 대한 "추가 예" 링크를 추가했습니다.

2006년 4월 14일

변경된 내용
  • 항상 적용되는 제약 조건의 목록에서 FOREIGN KEY를 제거하여 CHECK_CONSTRAINTS 설명에서 참고를 업데이트했습니다.
  • ALTER TABLE 권한에 대한 요구 사항을 업데이트했습니다.