bcp 유틸리티

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

대량 복사 프로그램 유틸리티(bulk copy program utility, bcp)는 MicrosoftSQL Server 인스턴스와 사용자가 지정한 형식의 데이터 파일 간에 데이터를 대량 복사합니다.

참고 항목

Linux에서 bcp를 사용하려면 Linux에서 SQL Server 명령줄 도구 sqlcmd 및 bcp 설치를 참조하세요.

Azure Synapse Analytics에서 bcp를 사용하는 방법에 대한 자세한 내용은 bcp를 사용하여 데이터 로드를 참조하세요.

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

bcp 구문에 사용되는 구문 표기 규칙에 대한 자세한 내용은 Transact-SQL 구문 표기 규칙을 참조하세요.

참고

bcp 를 사용하여 데이터를 백업하는 경우 서식 파일을 만들어 데이터 서식을 기록합니다. bcp 데이터 파일에 는 스키마 또는 형식 정보가 포함되지 않으므로 테이블 또는 뷰가 삭제되고 서식 파일이 없는 경우 데이터를 가져올 수 없습니다.

참고 항목

Microsoft Entra ID 는 이전에 Azure AD(Azure Active Directory)라고 했습니다.

bcp 유틸리티의 최신 버전 다운로드

명령줄 도구는 GA(일반 공급)되지만 SQL Server 2019(15.x) 이상 버전용 설치 관리자 패키지와 함께 릴리스됩니다.

Windows

Linux 및 macOS

Linux 및 macOS에 sqlcmd 및 bcp를 설치하는 지침은 Linux에서 SQL Server 명령줄 도구 sqlcmdbcp 설치를 참조하세요.

버전 정보

  • 릴리스 번호: 15.0.4298.1
  • 빌드 번호: 15.0.4298.1
  • 릴리스 날짜: 2023년 4월 7일

새 버전의 sqlcmd 는 Azure SQL Database, Azure Synapse Analytics 및 Always Encrypted 기능에 대한 MFA(다단계 인증) 지원을 포함하여 Microsoft Entra 인증을 지원합니다.

bcp 는 Azure SQL Database 및 Azure Synapse Analytics에 대한 MFA(다단계 인증) 지원을 포함하여 Microsoft Entra 인증을 지원합니다.

시스템 요구 사항

  • Windows 8, Windows 8.1, Windows 10, Windows 11

  • Windows Server 2016, Windows Server 2019, Windows Server 2022

이 구성 요소에는 최신 Microsoft ODBC Driver 17 for SQL Server가 필요합니다.

bcp 버전을 검사 명령을 실행하고 bcp -v 15.0.4298.1 이상이 사용 중인지 확인합니다.

참고 항목

sqlcmdbcp 는 Linux에서도 사용할 수 있습니다. 자세한 내용은 Linux에서 SQL Server 명령줄 도구 sqlcmd 및 bcp 설치를 참조하세요.

구문

bcp [database_name.] schema.{table_name | view_name | "query"}
    {in data_file | out data_file | queryout data_file | format nul}
                                                                                                         
    [-a packet_size]
    [-b batch_size]
    [-c]
    [-C { ACP | OEM | RAW | code_page } ]
    [-d database_name]
    [-D]
    [-e err_file]
    [-E]
    [-f format_file]
    [-F first_row]
    [-G Azure Active Directory Authentication]
    [-h"hint [,...n]"]
    [-i input_file]
    [-k]
    [-K application_intent]
    [-l login_timeout]
    [-L last_row]
    [-m max_errors]
    [-n]
    [-N]
    [-o output_file]
    [-P password]
    [-q]
    [-r row_term]
    [-R]
    [-S [server_name[\instance_name]]]
    [-t field_term]
    [-T]
    [-U login_id]
    [-v]
    [-V (80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160 ) ]
    [-w]
    [-x]

명령줄 옵션

database_name

지정된 테이블 또는 뷰가 있는 데이터베이스의 이름입니다. 이 인수를 지정하지 않으면 사용자의 기본 데이터베이스를 사용합니다.

을 사용하여 데이터베이스 이름을 -d명시적으로 지정할 수도 있습니다.

schema(스키마)

테이블 또는 뷰 소유자의 이름입니다. 작업을 수행하는 사용자가 지정한 테이블 또는 뷰를 소유하고 있는 경우에는schema는 선택 사항입니다. 스키마를 지정하지 않고 작업을 수행하는 사용자가 지정된 테이블 또는 뷰를 소유하지 않으면 SQL Server에서 오류 메시지를 반환하고 작업이 취소됩니다.

table_name

SQL Server로 데이터를 가져올 때 대상 테이블의 이름(및 SQL Server(inout)에서 데이터를 내보낼 때 원본 테이블입니다.

view_name

SQL Server로 데이터를 복사할 때 대상 뷰의 이름과 SQL Serverout(in)에서 데이터를 복사할 때 원본 뷰입니다. 모든 열이 같은 테이블을 참조하는 뷰만 대상 뷰로 사용할 수 있습니다. 뷰에 데이터를 복사하는 경우의 제한 사항에 대한 자세한 내용은 INSERT(Transact-SQL)를 참조하세요.

"query"

결과 집합을 반환하는 Transact-SQL 쿼리입니다. 쿼리에서 여러 결과 집합을 반환하는 경우 첫 번째 결과 집합만 데이터 파일에 복사되고 그 다음 결과 집합은 무시됩니다. 쿼리는 큰따옴표로 묶고 쿼리 안에 포함되는 모든 것은 작은따옴표로 묶습니다. queryout 은 쿼리에서 데이터를 대량 복사할 때도 지정해야 합니다.

bcp 문을 실행하기 전에 저장 프로시저 내에서 참조되는 모든 테이블이 있는 한 쿼리는 저장 프로시저를 참조할 수 있습니다. 예를 들어 저장 프로시저가 임시 테이블을 생성하면 이 임시 테이블을 런타임에만 사용할 수 있고 문 실행 시에는 사용할 수 없기 때문에 bcp 문이 실패합니다. 이 경우 테이블에 저장 프로시저 결과를 삽입한 다음 bcp 를 사용하여 테이블에서 데이터 파일로 데이터를 복사할 수 있습니다.

in

는 파일에서 데이터베이스 테이블 또는 뷰로 복사합니다. 대량 복사의 방향을 지정합니다.

out

데이터베이스 테이블 또는 뷰에서 파일로 복사합니다. 대량 복사의 방향을 지정합니다.

기존 파일을 지정하면 이 파일을 덮어씁니다. 데이터를 추출할 때 bcp 유틸리티는 빈 문자열을 null로 나타내고 null 문자열은 빈 문자열로 나타냅니다.

data_file

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

queryout

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

format

지정한 옵션(-n, -c, -w또는)과 테이블 또는 -N뷰 구분 기호를 기반으로 서식 파일을 만듭니다. 데이터를 대량 복사하는 경우 bcp 명령은 서식 파일을 참조할 수 있으므로 대화형으로 서식 정보를 다시 입력할 필요가 없습니다. 이 format 옵션을 사용하려면 이 옵션이 필요합니다 -f . XML 서식 파일을 만들려면 이 옵션도 필요합니다 -x . 자세한 내용은 서식 파일 만들기(SQL Server)를 참조하세요. 값(format nul)으로 지정 nul 해야 합니다.

-a packet_size

서버에서 전송되거나 서버로 전송되는 네트워크 패킷당 바이트 수를 지정합니다. SQL Server Management Studio(또는 sp_configure 시스템 저장 프로시저)를 사용하여 서버 구성 옵션을 설정할 수 있습니다. 그러나 이 옵션을 사용하여 서버 구성 옵션을 개별적으로 재정의할 수 있습니다. packet_size 4096바이트에서 65,535바이트까지 가능하며, 기본값은 .입니다4096.

패킷 크기가 커지면 대량 복사 작업의 성능이 향상될 수 있습니다. 더 큰 패킷이 요청되었지만 부여할 수 없는 경우 기본값이 사용됩니다. bcp 유틸리티가 생성하는 성능 통계에는 사용되는 패킷의 크기가 나타납니다.

-b batch_size

가져온 데이터의 일괄 처리당 행 수를 지정합니다. 각 일괄 처리는 커밋되기 전에 전체 일괄 처리를 가져오는 별도의 트랜잭션으로 가져오고 기록합니다. 기본적으로 데이터 파일의 모든 행은 하나의 일괄 처리로 가져옵니다. 여러 일괄 처리에 행을 분산시키려면 데이터 파일의 행 수보다 작은 batch_size 를 지정합니다. 일괄 처리에 대한 트랜잭션이 실패하면 현재 일괄 처리에서 삽입한 내용만 롤백됩니다. 커밋된 트랜잭션으로 이미 가져온 일괄 처리는 나중에 발생한 오류의 영향을 받지 않습니다.

옵션과 함께 -h "ROWS_PER_BATCH=<bb>" 이 옵션을 사용하지 마세요.

-c

문자 데이터 형식을 사용하여 작업을 수행합니다. 이 옵션은 각 필드에 대한 메시지를 표시하지 않습니다. 접두 \t 사를 사용하지 않고(탭 문자)를 필드 구분 \r\n 기호로 사용하고(줄 바꿈 문자) 행 종결자로 문자(줄 바꿈 문자)를 스토리지 형식으로 사용합니다. -c 와 호환 -w되지 않습니다.

자세한 내용은 문자 형식을 사용하여 데이터를 가져오거나 내보냅니다(SQL Server).

-C { ACP | OEM | RAW | code_page }

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

참고

데이터 정렬/코드 페이지 사양보다 65001 옵션에 더 높은 우선 순위를 두려는 경우를 제외하고는 서식 파일의 각 열에 대한 데이터 정렬 이름을 지정하는 것이 좋습니다.

코드 페이지 값 Description
ACP ANSI/Microsoft Windows(ISO 1252)입니다.
OEM 클라이언트가 사용하는 기본 코드 페이지입니다. 지정하지 않은 경우 -C 사용되는 기본 코드 페이지입니다.
RAW 코드 페이지 간 변환이 일어나지 않습니다. 변환이 일어나지 않으므로 가장 빠른 옵션입니다.
code_page 850과 같은 특정 코드 페이지 번호입니다.

버전 13 이전 버전(SQL Server 2016(13.x))은 코드 페이지 65001(UTF-8 인코딩)을 지원하지 않습니다. 버전 13부터 UTF-8 인코딩을 SQL Server이전 버전으로 가져올 수 있습니다.

-d database_name

연결할 데이터베이스를 지정합니다. 기본적으로 bcp사용자의 기본 데이터베이스에 연결합니다. -d database_name 세 부분 이름(bcp에 첫 번째 매개 변수로 전달된 database_name.schema.table)을 지정하면 데이터베이스 이름을 두 번 지정할 수 없기 때문에 오류가 발생합니다. database_name 하이픈() 또는 슬래시(/-)로 시작하는 경우 데이터베이스 이름 사이에 -d 공백을 추가하지 마세요.

-D

bcp-S 옵션에 전달된 값이 DSN(데이터 원본 이름)으로 해석되도록 합니다. DSN을 사용하여 명령줄을 간소화하거나, MultiSubnetFailover와 같은 명령줄에서 액세스할 수 없는 드라이버 옵션을 적용하거나, 명령줄 인수로 검색할 수 없도록 중요한 자격 증명을 보호하는 데 사용할 수 있습니다. 자세한 내용은 sqlcmd를 사용하여 연결에서 sqlcmd 및 bcp에서 DSN 지원을 참조하세요.

-e err_file

bcp 유틸리티가 파일에서 데이터베이스로 전송할 수 없는 행을 저장하는 데 사용되는 오류 파일의 전체 경로를 지정합니다. bcp 명령의 오류 메시지는 사용자의 워크스테이션에 나타납니다. 이 옵션을 사용하지 않으면 오류 파일이 만들어지지 않습니다.

err_file 하이픈() 또는 슬래시(-/)로 시작하는 경우 err_file 값 사이에 -e 공백을 포함하지 마세요.

E-

가져온 데이터 파일의 ID 값이 ID 열에 사용되도록 지정합니다. 지정하지 않으면 -E 가져오고 있는 데이터 파일의 이 열에 대한 ID 값이 무시되고 SQL Server는 테이블을 만드는 동안 지정된 초기값 및 증가 값을 기반으로 고유한 값을 자동으로 할당합니다. 자세한 내용은 DBCC CHECKIDENT를 참조하세요.

데이터 파일에 테이블 또는 뷰의 ID 열에 대한 값이 없는 경우 서식 파일을 사용하여 데이터를 가져올 때 테이블 또는 뷰의 ID 열을 건너뛰도록 지정합니다. SQL Server는 열에 고유한 값을 자동으로 할당합니다.

-E 옵션에는 특별한 사용 권한 요구 사항이 있습니다. 자세한 내용은 이 문서의 뒷부분에 있는 "주의"를 참조하세요.

-f format_file

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

  • 옵션과 함께 사용되는 경우 -f 지정된 테이블 또는 뷰에 대해 지정된 format_file 만들어 format 집니다. XML 서식 파일을 만들려면 옵션도 지정합니다 -x . 자세한 내용은 서식 파일 만들기(SQL Server)를 참조하세요.

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

    참고 항목

    또는 out 옵션과 함께 in 서식 파일을 사용하는 것은 선택 사항입니다. 옵션이 없 -f 으면 , , -w-c또는 -N 지정되지 않은 경우 -n명령은 형식 정보를 묻는 메시지를 표시하고 기본 파일 이름이 형식 파일(기본 파일 이름bcp.fmt)에 응답을 저장할 수 있도록 합니다.

format_file 하이픈() 또는 슬래시(/-)로 시작하는 경우 format_file 값 사이에 -f 공백을 포함하지 마세요.

-F first_row

테이블에서 내보내거나 데이터 파일에서 가져올 첫 번째 행 번호를 지정합니다. 이 매개 변수에는 () 0보다 크지만(>) 보다< 작거나() 총 개수 행과= 같은 값이 필요합니다. 이 매개 변수를 지정하지 않을 경우 기본값은 파일의 첫 번째 행입니다.

first_row 는 최대 2^63-1의 값을 갖는 양의 정수입니다. -F first_row 1부터 시작하는 경우

-G

적용 대상: Azure SQL Database 및 Azure Synapse Analytics만 해당합니다.

이 스위치는 Azure SQL Database 또는 Azure Synapse Analytics에 연결할 때 클라이언트에서 사용자가 Microsoft Entra ID로 인증되도록 지정하는 데 사용됩니다. -G 스위치에는 버전 14.0.3008.27 이상이 필요합니다. 버전을 확인하려면 .를 실행 bcp -v합니다. 자세한 내용은 SQL Database 또는 Azure Synapse Analytics에서 Microsoft Entra 인증 사용을 참조하세요.

Important

Microsoft Entra 대화형 인증은 현재 Linux 또는 macOS에서 지원되지 않습니다. Microsoft Entra 통합 인증을 사용하려면 SQL Server 용 Microsoft ODBC Driver 17 버전 17.6.1 이상 버전과 올바르게 구성된 Kerberos 환경이 필요합니다.

bcp 버전에 Microsoft Entra 인증 지원이 포함되어 있는지 검사 사용 가능한 인수 목록에 표시되는지 입력 bcp --help 하고 확인 -G 합니다.

  • Microsoft Entra 사용자 이름 및 암호

    Microsoft Entra 사용자 이름 및 암호를 사용하려는 경우 옵션을 제공하고 -G 옵션과 옵션을 제공하여 -U-P 사용자 이름과 암호를 사용할 수도 있습니다.

    다음 예제에서는 Microsoft Entra 사용자 이름 및 암호 자격 증명을 사용하여 데이터를 내보냅니다. 이 예제에서는 Azure 서버 aadserver.database.windows.net에서 데이터베이스 testdb의 테이블 bcptest를 내보내고 데이터를 파일 c:\last\data1.dat에 저장합니다.

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    

    다음 예제에서는 Microsoft Entra 사용자의 자격 증명을 사용하여 데이터를 가져옵니다. 이 예제에서는 Microsoft Entra 사용자 이름 및 암호를 사용하여 Azure 서버 aadserver.database.windows.net 의 데이터베이스 testdb 에 대한 파일 c:\last\data1.dat 의 데이터를 테이블 bcptest 로 가져옵니다.

    bcp bcptest in "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com -P xxxxx
    
  • Microsoft Entra 통합

    Microsoft Entra 통합 인증의 -G 경우 사용자 이름 또는 암호 없이 옵션을 제공합니다. 이 구성을 사용하려면 현재 Windows 사용자 계정(bcp 명령이 실행 중인 계정)이 Microsoft Entra ID와 페더레이션되어야 합니다.

    다음 예제에서는 Microsoft Entra 통합 인증을 사용하여 데이터를 내보냅니다. 이 예제에서는 논리 서버 aadserver.database.windows.net 의 데이터베이스 testdb 에서 테이블을 bcptest 내보내고 Microsoft Entra ID와 페더레이션된 Windows 자격 증명을 사용하여 데이터를 파일에 c:\last\data2.dat저장합니다.

    bcp bcptest out "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c -t
    

    다음 예제에서는 Microsoft Entra 통합 인증을 사용하여 데이터를 가져옵니다. 이 예제에서는 Microsoft Entra ID와 페더레이션된 Windows 자격 증명을 사용하여 파일 테이블 c:\last\data2.dat 의 데이터를 논리 서버aadserver.database.windows.net의 데이터베이스 testdb 에 있는 테이블 bcptest 로 가져옵니다.

    bcp bcptest in "c:\last\data2.dat" -S aadserver.database.windows.net -d testdb -G -c -t
    
  • Microsoft Entra 대화형

    모든 Azure SQL 및 SQL Server 2022 이상에서 사용할 수 있는 Microsoft Entra 대화형 인증을 사용하면 대화형 대화 상자를 사용하여 인증할 수 있으며, 다단계 인증도 지원합니다.

    Microsoft Entra 대화형 인증에는 bcp버전 15.0.1000.34 이상과 ODBC 버전 17.2 이상이 필요합니다.

    대화형 인증을 -G 사용하도록 설정하려면 사용자 이름(-U)만, 암호가 없는 옵션을 제공합니다.

    다음 예제에서는 Microsoft Entra 계정의 사용자 이름을 지정하는 것을 포함하여 Microsoft Entra 대화형 인증을 사용하여 데이터를 내보냅니다.

    대화형 모드에서는 암호를 수동으로 입력하거나 다단계 인증을 사용하도록 설정된 계정의 경우 구성된 MFA 인증 방법을 완료해야 합니다.

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U alice@aadtest.onmicrosoft.com
    

    페더레이션된 do기본 Windows 계정인 Microsoft Entra 사용자를 사용하는 경우 명령줄에 입력한 사용자 이름에 해당 do기본(예: joe@contoso.com)가 포함되어야 합니다.

    bcp bcptest out "c:\last\data1.dat" -c -t -S aadserver.database.windows.net -d testdb -G -U joe@contoso.com
    

    게스트 사용자가 특정 Microsoft Entra 테넌트에 있고 bcp 명령을 실행할 데이터베이스 권한이 있는 SQL Database에 있는 그룹의 일부인 경우 게스트 사용자 별칭(예keith0@adventure-works.com: )이 사용됩니다.

-h "힌트 [, ... n]"

데이터를 테이블 또는 뷰로 대량으로 가져오는 동안 사용할 힌트 또는 힌트를 지정합니다.

  • ORDER( [ASC | DESC] [, ...n])

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

  • ROWS_PER_BATCH = bb

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

  • KILOBYTES_PER_BATCH = cc

    일괄 처리당 데이터의 대략적인 KB 단위 크기( cc)입니다. 기본적으로 KILOBYTES_PER_BATCH는 알 수 없습니다.

  • TABLOCK

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

    참고 항목

    대상 테이블이 클러스터형 columnstore 인덱스인 경우 각 동시 스레드는 인덱스 내에 별도의 행 그룹이 할당되고 데이터를 로드하기 때문에 여러 동시 클라이언트에서 로드하는 데 TABLOCK 힌트가 필요하지 않습니다. 자세한 내용은 columnstore 인덱스 개념 문서를 참조하세요.

  • CHECK_CONSTRAINTS

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

    참고

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

    어느 시점에서는 전체 테이블에 대한 제약 조건을 검사 합니다. 대량 가져오기 작업 전에 테이블이 비어 있지 않은 경우 제약 조건을 다시 적용하는 비용이 증분 데이터에 CHECK 제약 조건을 적용하는 비용을 초과할 수 있습니다. 따라서 일반적으로 증분 대량 가져오기 중에 제약 조건을 검사하도록 설정하는 것이 좋습니다.

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

    참고 항목

    이제 bcp는 데이터 파일의 잘못된 데이터에서 스크립트가 실행되는 경우 실패할 수 있는 데이터 유효성 검사 및 데이터 검사 적용합니다.

    참고 항목

    max_errors 스위치는 -m제약 조건 검사 적용되지 않습니다.

  • FIRE_TRIGGERS

    인수로 in 지정된 경우 대상 테이블에 정의된 모든 삽입 트리거는 대량 복사 작업 중에 실행됩니다. FIRE_TRIGGERS 지정되지 않으면 삽입 트리거가 실행되지 않습니다. FIRE_TRIGGERS , queryoutformat 인수에 out대해 무시됩니다.

-i input_file

대화형 모드-n-c-w-N(, 또는 지정되지 않음)를 사용하여 대량 복사를 수행할 때 각 데이터 필드에 대한 명령 프롬프트 질문에 대한 응답을 포함하는 응답 파일의 이름을 지정합니다.

input_file 하이픈() 또는 슬래시(-/)로 시작하는 경우 input_file 값 사이에 -i 공백을 포함하지 마세요.

-k

작업 시 삽입된 열에 기본값이 지정되지 않고 빈 열이 Null 값을 보유하도록 지정합니다. 자세한 내용은 대량 가져오기 중에 null 또는 기본값 유지(SQL Server)를 참조하세요.

-K application_intent

서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. ReadOnly값만 사용할 수 있습니다. 지정되지 않은 경우 -K bcp 유틸리티는 Always On 가용성 그룹의 보조 복제본(replica) 대한 연결을 지원하지 않습니다. 자세한 내용은 Always On 가용성 그룹의 보조 복제본(replica) 읽기 전용 워크로드 오프로드를 참조하세요.

-l login_timeout

로그인 시간 제한을 지정합니다. -l 옵션을 사용하여 서버에 연결을 시도할 때 SQL Server에 대한 로그인 제한 시간(초)을 지정합니다. 기본 로그인 제한 시간은 15초입니다. 로그인 제한 시간은 0에서 65534 사이의 숫자여야 합니다. 제공된 값이 숫자가 아니거나 해당 범위에 속하지 않으면 bcp 에서 오류 메시지를 생성합니다. 값 0은 무한 시간 제한을 지정합니다.

-L last_row

테이블에서 내보내거나 데이터 파일에서 가져올 마지막 행 번호를 지정합니다. 이 매개 변수에는 () 0보다 크지만 마지막> 행의 개수보다 작<거나 (=)와 같은 값이 필요합니다. 이 매개 변수를 지정하지 않을 경우 기본값은 파일의 마지막 행입니다.

last_row 는 최대 2^63-1의 값을 갖는 양의 정수입니다.

-m max_errors

bcp 작업이 취소되는 최대 구문 오류 발생 횟수를 지정합니다. 구문 오류란 대상 데이터 형식으로의 데이터 변환 오류를 나타냅니다. 총 max_errors 수에는 제약 조건 위반과 같이 서버에서만 검색할 수 있는 오류는 제외됩니다.

bcp 유틸리티에서 복사할 수 없는 행은 무시되며 하나의 오류로 계산됩니다. 이 옵션이 포함되지 않으면 기본값은 10입니다.

참고 항목

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

-n

데이터의 네이티브(데이터베이스) 데이터 형식을 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 각 필드에 대한 메시지를 표시하지 않습니다. 네이티브 값을 사용합니다.

자세한 내용은 네이 티브 형식을 사용하여 데이터를 가져오거나 내보냅니다(SQL Server).

-N

문자가 아닌 데이터의 경우 데이터의 네이티브(데이터베이스) 데이터 형식을 사용하고 문자 데이터의 경우 유니코드 문자를 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 옵션 대신 -w 더 높은 성능을 제공하며 데이터 파일을 사용하여 SQL Server의 한 인스턴스에서 다른 인스턴스로 데이터를 전송하기 위한 것입니다. 각 필드에 대한 메시지가 표시되지 않습니다. ANSI 확장 문자가 포함된 데이터를 전송하고 기본 모드의 성능을 활용하려는 경우 이 옵션을 사용합니다.

자세한 내용은 유니코드 원시 형식을 사용하여 데이터 가져오기 또는 내보내기(SQL Server)를 참조하세요.

bcp를 사용하여 데이터를 내보내고 동일한 테이블 스키마로 -N가져오는 경우 고정 길이 유니코드가 아닌 문자 열(예: char(10))이 있는 경우 잘림 경고가 표시될 수 있습니다.

이 경고는 무시해도 됩니다. 이 경고를 -n-N해결하는 한 가지 방법은 .

-o output_file

명령 프롬프트에서 리디렉션된 출력을 받는 파일의 이름을 지정합니다.

output_file 하이픈() 또는 슬래시(-/)로 시작하는 경우 output_file 값 사이에 -o 공백을 포함하지 마세요.

-P password

로그인 ID의 암호를 지정합니다. 이 옵션을 사용하지 않으면 bcp 명령에서 암호를 묻는 메시지를 표시합니다. 암호를 입력하지 않고 명령 프롬프트의 마지막에 이 옵션을 사용하면 bcp 는 기본 암호 NULL을 사용합니다.

중요

빈 암호를 사용하지 마세요. 강력한 암호를 사용하세요.

암호를 마스킹하려면 옵션과 -U 함께 옵션을 지정 -P 하지 마세요. 대신 옵션 및 기타 스위치와 함께 -U bcp지정한 후(지정-P하지 않음) Enter 키를 누르면 명령에서 암호를 묻는 메시지가 표시됩니다. 이 메서드는 암호를 입력할 때 마스킹되도록 합니다.

암호가 하이픈() 또는 슬래시(-/)로 시작하는 경우 암호 값과 사이에 -P 공백을 추가하지 마세요.

-q

bcp 유틸리티와 SQL Server인스턴스 간의 연결에서 SET QUOTED_IDENTIFIERS ON 문을 실행합니다. 이 옵션을 사용하여 공백이나 작은따옴표를 포함하는 데이터베이스, 소유자, 테이블 또는 뷰 이름을 지정합니다. 세 부분으로 구성된 테이블 이름이나 뷰 이름 전체를 큰따옴표("")로 묶습니다.

공백 또는 작은따옴표를 포함하는 데이터베이스 이름을 지정하려면 이 -q 옵션을 사용해야 합니다.

-q 에 전달된 -d값에는 적용되지 않습니다.

자세한 내용은 이 문서의 뒷부분에 있는 비고를 참조하세요.

-r row_term

행 종결자를 지정합니다. 기본값은 \n (줄 바꿈 문자)입니다. 기본 행 종결자를 재정의하려면 이 매개 변수를 사용합니다. 자세한 내용은 필드 및 행 종결자 지정(SQL Server)을 참조하세요.

bcp 명령에서 16진수 표기법으로 행 종결자를 지정하면 값이 .에서 0x00잘립니다. 예를 들어, 지정 0x410041하는 경우 사용 0x41 됩니다.

row_term 하이픈() 또는 슬래시(-/)로 시작하는 경우 row_term 값 사이에 -r 공백을 포함하지 마세요.

-R

클라이언트 컴퓨터의 로캘 설정에 정의된 국가별 형식을 사용하여 통화, 날짜 및 시간 데이터를 SQL Server 로 대량 복사하도록 지정합니다. 기본적으로 국가별 설정은 무시됩니다.

-S server_name [\instance_name]

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

-t field_term

필드 종결자를 지정합니다. 기본값은 \t (탭 문자)입니다. 기본 필드 종결자를 재정의하려면 이 매개 변수를 사용합니다. 자세한 내용은 필드 및 행 종결자 지정(SQL Server)을 참조하세요.

bcp 명령에서 16진수 표기법으로 필드 종결자를 지정하면 값이 .에서 0x00잘립니다. 예를 들어, 지정 0x410041하는 경우 사용 0x41 됩니다.

field_term 하이픈() 또는 슬래시(-/)로 시작하는 경우 field_term 값 사이에 -t 공백을 포함하지 마세요.

-T

bcp 유틸리티가 통합 보안을 사용하는 트러스트된 연결을 통해 SQL Server 로 연결되도록 지정합니다. 네트워크 사용자, login_id암호 의 보안 자격 증명은 필요하지 않습니다. 지정되지 않은 경우 -T 성공적으로 로그인하려면 지정 -U 해야 -P 합니다.

Important

bcp 유틸리티가 통합 보안을 사용하여 신뢰할 수 있는 연결로 SQL Server에 연결하는 경우 사용자 이름과 암호 조합 대신 옵션(신뢰할 수 있는 연결)을 사용합니다-T. bcp 유틸리티가 SQL Database 또는 Azure Synapse Analytics에 연결하는 경우 Windows 인증 또는 Microsoft Entra 인증을 사용하는 것은 지원되지 않습니다. -U-P 옵션을 사용합니다.

-U login_id

SQL Server연결에 사용하는 로그인 ID를 지정합니다.

-v

bcp 유틸리티 버전 번호 및 저작권을 보고합니다.

-V(80 | 90 | 100 | 110 | 120 | 130 | 140 | 150 | 160)

이전 SQL Server버전의 데이터 형식을 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 각 필드에 대한 메시지를 표시하지 않습니다. 기본값을 사용합니다.

80 = SQL Server 2000(8.x)

90 = SQL Server 2005(9.x)

100 = SQL Server 2008(10.0.x) 및 SQL Server 2008 R2(10.50.x)

110 = SQL Server 2012(11.x)

120 = SQL Server 2014(12.x)

130 = SQL Server 2016(13.x)

140 = SQL Server 2017(14.x)

150 = SQL Server 2019(15.x)

160 = SQL Server 2022(16.x)

예를 들어 SQL Server 2000(8.x)에서는 지원되지 않지만 그 이후 SQL Server버전에 도입된 형식에 대한 데이터를 생성하려면 -V80 옵션을 사용하십시오.

자세한 내용은 이전 버전의 SQL Server에서 네이티브 및 문자 형식 데이터 가져오기를 참조 하세요.

-w

유니코드 문자를 사용하여 대량 복사 작업을 수행합니다. 이 옵션은 각 필드에 대한 메시지를 표시하지 않습니다. nchar를 스토리지 형식으로 사용하고 접두사 없음, \t(탭 문자)를 필드 구분 기호로 사용하고 \n(줄 바꿈 문자)을 행 종결자로 사용합니다. -w 와 호환 -c되지 않습니다.

자세한 내용은 유니코드 문자 형식을 사용하여 데이터를 가져오거나 내보냅니다(SQL Server).

-x

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

설명

  • Microsoft SQL Server 2019 (15.x) 도구를 설치하면 bcp 13.0 클라이언트가 설치됩니다. SQL Server의 여러 버전에 대해 도구가 설치된 경우 PATH 환경 변수 값의 순서에 따라 bcp 13.0 클라이언트 대신 이전 bcp 클라이언트를 사용하게 될 수 있습니다. 이 환경 변수는 실행 파일을 검색하기 위해 Windows에서 사용하는 디렉터리 집합을 정의합니다. 사용 중인 버전을 검색하려면 Windows 명령 프롬프트에서 명령을 실행 bcp -v 합니다. PATH 환경 변수에서 명령 경로를 설정하는 방법은 환경 변수를 참조하거나 Windows 도움말에서 환경 변수를 검색하세요.

    bcp 유틸리티의 최신 버전이 실행 중인지 확인하려면 이전 버전의 bcp 유틸리티를 제거해야 합니다.

    bcp 유틸리티의 모든 버전이 설치되는 위치를 확인하려면 명령 프롬프트를 입력합니다.

    where bcp.exe
    
  • bcp 유틸리티는 Microsoft SQL Server 2016 기능 팩과 별도로 다운로드할 수도 있습니다. ENU\x64\MsSqlCmdLnUtils.msi 또는 ENU\x86\MsSqlCmdLnUtils.msi중에 선택합니다.

  • XML 서식 파일은 SQL Server 도구를 SQL Server Native Client와 함께 설치한 경우에만 지원됩니다.

  • bcp 유틸리티를 찾을 위치 또는 실행 방법 및 명령 프롬프트 유틸리티 구문 규칙에 대한 자세한 내용은 SQL 명령 프롬프트 유틸리티(데이터베이스 엔진)를 참조하세요.

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

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

  • 추가 특수 문자 사용

    문자<, >, |&^ 특수 명령 셸 문자이며 이스케이프 문자(^)가 앞에 오거나 String에서 사용될 때 따옴표로 묶어야 합니다(예: "StringContaining&Symbol"). 따옴표를 사용하여 특수 문자 중 하나를 포함하는 문자열을 묶을 경우 따옴표는 환경 변수 값의 일부로 설정됩니다.

네이티브 데이터 파일 지원

SQL Server에서 bcp 유틸리티는 SQL Server 2000(8.x) 이상의 SQL Server 버전과 호환되는 네이티브 데이터 파일을 지원합니다.

계산 열 및 타임스탬프 열

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

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

공백 또는 따옴표가 포함된 식별자 지정

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

  • 명령 프롬프트에서 공백 또는 따옴표가 포함된 식별자나 파일 이름을 지정할 때는 식별자를 큰따옴표("")로 묶습니다.

    예를 들어 다음 bcp out 명령은 Currency Types.dat라는 데이터 파일을 만듭니다.

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

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

    • -q 옵션을 지정합니다. 또는

    • 소유자, 테이블 또는 뷰 이름을 따옴표 안에 대괄호([])로 묶습니다.

데이터 유효성 검사

이제 bcp는 데이터 파일의 잘못된 데이터에서 스크립트가 실행되는 경우 실패할 수 있는 데이터 유효성 검사 및 데이터 검사 적용합니다. 예를 들어 bcp 는 이제 다음을 확인합니다.

  • float 또는 real 데이터 형식의 원시 표시가 유효한지 여부

  • 유니코드 데이터의 길이가 짝수 바이트인지 여부

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

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

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

데이터 형식 영향
SQLCHAR 또는 SQLVARYCHAR 데이터를 클라이언트 코드 페이지나 데이터 정렬에 포함된 코드 페이지로 보냅니다. 이 효과는 서식 파일을 지정하지 않고 스위치를 -c 지정하는 것과 같습니다.
SQLNCHAR 또는 SQLNVARCHAR 데이터를 유니코드로 보냅니다. 이 효과는 서식 파일을 지정하지 않고 스위치를 -w 지정하는 것과 같습니다.
SQLBINARY 또는 SQLVARYBIN 데이터를 변환하지 않고 보냅니다.

사용 권한

작업에는 bcp out 원본 테이블에 대한 SELECT 권한이 필요합니다.

bcp in 작업을 수행하려면 대상 테이블에 대한 SELECT/INSERT 권한이 최소한으로 필요합니다. 또한 다음 조건 중 어느 것이라도 충족되는 경우 ALTER TABLE 권한이 필요합니다.

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

    참고 항목

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

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

    참고 항목

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

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

참고 항목

대상 테이블에 대해 ALTER TABLE 권한이 필요하게 된 것은 SQL Server 2005(9.x)부터였습니다. 이 새로운 요구 사항으로 인해 사용자 계정에 대상 테이블에 대한 ALTER 테이블 권한이 없는 경우 트리거 및 제약 조건 검사 적용하지 않는 bcp 스크립트가 실패할 수 있습니다.

문자 모드(-c) 및 기본 모드(-n) 모범 사례

이 섹션에는 문자 모드() 및 기본 모드(-c-n)에 대한 권장 사항이 있습니다.

  • (관리istrator/User) 가능하면 네이티브 형식(-n)을 사용하여 구분 기호 문제를 방지합니다. SQL Server를 사용하여 내보내기 및 가져오기를 수행하려면 기본 형식을 사용합니다. 데이터를 SQL Server가 아닌 데이터베이스로 가져올 경우 또는 -w 옵션을 사용하여 -c SQL Server에서 데이터를 내보냅니다.

  • (관리자) BCP OUT를 사용할 때는 데이터를 확인합니다. 예를 들어 BCP OUT, BCP IN 및 BCP OUT을 사용하는 경우 데이터가 제대로 내보내지고 종결자 값이 일부 데이터 값의 일부로 사용되지 않는지 확인합니다. 종결자 값과 데이터 값 간의 충돌을 방지하려면 임의의 16진수 값을 사용하여 기본 종결자를 무시하세요(-t 및 -r 옵션 사용).

  • (사용자) 실제 문자열 값 간의 충돌 가능성을 최소화하려면 길고 고유한 종결자(바이트 또는 문자 시퀀스)를 사용합니다. 이렇게 하려면 -t 및 -r 옵션을 사용하면 됩니다.

예제

이 섹션의 WideWorldImporters 예제에서는 SQL Server 2016(13.x) 이상 버전, Azure SQL Database 및 Azure SQL Managed Instance에 대한 샘플 데이터베이스를 사용합니다. WideWorldImportershttps://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0에서 다운로드할 수 있습니다. 샘플 데이터베이스를 복원하는 구문은 RESTORE (Transact-SQL) 을 참조하세요.

예제 테스트 조건

달리 지정된 경우를 제외하고 예제에서는 Windows 인증을 사용하고 bcp 명령을 실행하는 서버 인스턴스에 신뢰할 수 있는 연결이 있다고 가정합니다. 이름이 지정된 D:\BCP 디렉터리가 많은 예제에서 사용됩니다.

다음 스크립트는 테이블의 빈 복사본을 WideWorldImporters.Warehouse.StockItemTransactions 만든 다음 기본 키 제약 조건을 추가합니다. SSMS(SQL Server Management Studio)에서 다음 T-SQL 스크립트를 실행합니다.

USE WideWorldImporters;
GO

SET NOCOUNT ON;

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Warehouse.StockItemTransactions_bcp')
BEGIN
    SELECT * INTO WideWorldImporters.Warehouse.StockItemTransactions_bcp
    FROM WideWorldImporters.Warehouse.StockItemTransactions
    WHERE 1 = 2;

    ALTER TABLE Warehouse.StockItemTransactions_bcp
    ADD CONSTRAINT PK_Warehouse_StockItemTransactions_bcp PRIMARY KEY NONCLUSTERED
    (StockItemTransactionID ASC);
END

참고

필요에 따라 StockItemTransactions_bcp 테이블을 자릅니다.

TRUNCATE TABLE WideWorldImporters.Warehouse.StockItemTransactions_bcp;

A. bcp 유틸리티 버전 식별

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

bcp -v

B. 테이블 행을 데이터 파일로 복사(신뢰할 수 있는 연결 포함)

다음 예제에서는 테이블의 out 옵션을 보여 줍니다 WideWorldImporters.Warehouse.StockItemTransactions .

  • 기본

    이 예에서는 StockItemTransactions_character.bcp 라는 데이터 파일을 만들고 문자 형식을 사용하여 테이블 데이터를 파일에 복사합니다.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -T
    
  • 확장

    이 예에서는 StockItemTransactions_native.bcp 라는 데이터 파일을 만들고 네이티브 형식을 사용하여 테이블 데이터를 파일에 복사합니다. 예제에서는 또한 최대 구문 오류 수, 오류 파일 및 출력 파일을 지정합니다.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions OUT D:\BCP\StockItemTransactions_native.bcp -m 1 -n -e D:\BCP\Error_out.log -o D:\BCP\Output_out.log -S -T
    

Error_out.logOutput_out.log을 검토합니다. Error_out.log 비어 있어야 합니다. StockItemTransactions_character.bcpStockItemTransactions_native.bcp간 파일 크기를 비교합니다.

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

다음 예제에서는 테이블의 out 옵션을 보여 줍니다 WideWorldImporters.Warehouse.StockItemTransactions . 이 예에서는 StockItemTransactions_character.bcp 라는 데이터 파일을 만들고 문자 형식을 사용하여 테이블 데이터를 파일에 복사합니다.

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

명령 프롬프트에서 다음 명령을 입력합니다. (시스템에서 암호를 묻는 메시지를 표시합니다.)

bcp WideWorldImporters.Warehouse.StockItemTransactions out D:\BCP\StockItemTransactions_character.bcp -c -U<login_id> -S<server_name\instance_name>

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

다음 예제에서는 이전에 만든 파일을 사용하여 테이블의 WideWorldImporters.Warehouse.StockItemTransactions_bcp 옵션을 보여 in 줍니다.

  • 기본

    이 예제에서는 이전에 만든 데이터 파일을 사용합니다 StockItemTransactions_character.bcp .

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_character.bcp -c -T
    
  • 확장

    이 예제에서는 이전에 만든 데이터 파일을 사용합니다 StockItemTransactions_native.bcp . 또한 힌트를 TABLOCK사용하여 일괄 처리 크기, 최대 구문 오류 수, 오류 파일 및 출력 파일을 지정합니다.

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

    bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp IN D:\BCP\StockItemTransactions_native.bcp -b 5000 -h "TABLOCK" -m 1 -n -e D:\BCP\Error_in.log -o D:\BCP\Output_in.log -S -T
    

    Error_in.logOutput_in.log을 검토합니다.

E. 데이터 파일에 특정 열 복사

특정 열을 복사하려면 이 옵션을 사용할 queryout 수 있습니다. 다음 예에서는 StockItemTransactionID 테이블의 Warehouse.StockItemTransactions 열만 데이터 파일로 복사합니다.

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

bcp "SELECT StockItemTransactionID FROM WideWorldImporters.Warehouse.StockItemTransactions WITH (NOLOCK)" queryout D:\BCP\StockItemTransactionID_c.bcp -c -T

F. 데이터 파일에 특정 행 복사

특정 행을 복사하려면 이 옵션을 사용할 queryout 수 있습니다. 다음 예에서는 Amy Trefl 테이블에서 WideWorldImporters.Application.People 라는 연락처 행만 데이터 파일( Amy_Trefl_c.bcp)로 복사합니다.

참고 항목

-d 스위치는 데이터베이스를 식별하는 데 사용됩니다.

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

bcp "SELECT * from Application.People WHERE FullName = 'Amy Trefl'" queryout D:\BCP\Amy_Trefl_c.bcp -d WideWorldImporters -c -T

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

Transact-SQL 문에서 데이터 파일로 결과 집합을 복사하려면 이 queryout 옵션을 사용합니다. 다음 예에서는 WideWorldImporters.Application.People 테이블에서 전체 이름을 기준으로 정렬된 이름을 People.txt 데이터 파일로 복사합니다.

참고 항목

스위치는 -t 쉼표로 구분된 파일을 만드는 데 사용됩니다.

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

bcp "SELECT FullName, PreferredName FROM WideWorldImporters.Application.People ORDER BY FullName" queryout D:\BCP\People.txt -t, -c -T

H. 서식 파일 만들기

다음 예에서는 Warehouse.StockItemTransactions 데이터베이스의 WideWorldImporters 테이블에 대해 3개의 서로 다른 서식 파일을 만듭니다. 만들어진 각 파일의 내용을 검토합니다.

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

REM non-XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_c.fmt -c -T

REM non-XML native format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_n.fmt -n -T

REM XML character format
bcp WideWorldImporters.Warehouse.StockItemTransactions format nul -f D:\BCP\StockItemTransactions_c.xml -x -c -T

참고 항목

스위치를 -x 사용하려면 bcp 9.0 클라이언트를 사용해야 합니다. bcp 9.0 클라이언트를 사용하는 방법은 "주의"를 참조하세요.

자세한 내용은 비 XML 서식 파일(SQL Server) 및 XML 서식 파일(SQL Server) 사용을 참조하세요.

9\. 서식 파일을 사용하여 bcp로 대량 가져오기

SQL Server 인스턴스로 데이터를 가져올 때 이전에 만든 서식 파일을 사용하려면 옵션과 함께 스위치를 -fin 사용합니다. 예를 들어 다음 명령은 이전에 만든 서식 파일인 StockItemTransactions_character.bcp을 사용하여 데이터 파일 Warehouse.StockItemTransactions_bcp 의 내용을 StockItemTransactions_c.xml테이블의 복사본으로 대량 복사합니다.

참고 항목

스위치 -L 는 처음 100 레코드만 가져오는 데 사용됩니다.

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

bcp WideWorldImporters.Warehouse.StockItemTransactions_bcp in D:\BCP\StockItemTransactions_character.bcp -L 100 -f D:\BCP\StockItemTransactions_c.xml -T

참고

데이터 파일 필드와 테이블 열의 숫자, 순서, 데이터 형식 등이 다른 경우 서식 파일을 사용하면 유용합니다. 자세한 내용은 데이터를 가져오거나 내보낼 파일 서식을 참조 하세요(SQL Server).

J. 코드 페이지 지정

다음 부분 코드 예제에서는 코드 페이지 65001을 지정하는 동안 bcp 가져오기를 보여줍니다.

bcp MyTable in "D:\data.csv" -T -c -C 65001 -t , ...

K. 사용자 지정 필드 및 행 종결자를 사용하는 출력 파일 예제

이 예제에서는 사용자 지정 필드와 행 종결자를 사용하여 bcp에서 생성된 두 개의 샘플 파일을 보여 있습니다.

  1. 두 개의 열을 사용하여 데이터베이스에 테이블을 만듭니다 IDName.dbo.T1tempdb

    USE tempdb;
    GO
    
    CREATE TABLE dbo.T1 (ID INT, [Name] NVARCHAR(20));
    GO
    
    INSERT INTO dbo.T1 VALUES (1, N'Natalia');
    INSERT INTO dbo.T1 VALUES (2, N'Mark');
    INSERT INTO dbo.T1 VALUES (3, N'Randolph');
    GO
    
  2. 사용자 지정 필드 종결자를 사용하여 예제 테이블에서 dbo.T1출력 파일을 생성합니다.

    이 예제에서는 서버 이름이 MYSERVER고 사용자 지정 필드 종결자는 .로 지정됩니다 -t ,.

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t ,
    

    결과 집합은 다음과 같습니다.

    1,Natalia
    2,Mark
    3,Randolph
    
  3. 사용자 지정 필드 종결자 및 사용자 지정 행 종결자를 사용하여 예제 테이블에서 dbo.T1출력 파일을 생성합니다.

    이 예제에서는 서버 이름이고 MYSERVER, 사용자 지정 필드 종결자가 지정 -t ,되고, 사용자 지정 행 종결자가 지정됩니다 -r :.

    bcp dbo.T1 out T1.txt -T -S MYSERVER -d tempdb -w -t , -r :
    

    결과 집합은 다음과 같습니다.

    1,Natalia:2,Mark:3,Randolph:
    

    참고 항목

    행 종결자는 항상 마지막 레코드에도 추가됩니다. 그러나 필드 종결자는 마지막 필드에 추가되지 않습니다.

추가 예제

다음 문서에는 bcp 사용 예제가 포함되어 있습니다.

고려 사항 및 제한 사항

  • bcp 유틸리티에는 오류 메시지에 512 바이트 문자만 표시된다는 제한이 있습니다. 오류 메시지의 처음 512바이트만 표시됩니다.

도움말 보기

SQL 설명서에 참여하세요

SQL 콘텐츠를 직접 편집할 수 있다는 것을 알고 계셨나요? 직접 편집하면 설명서가 개선될 뿐만 아니라 페이지에 참여자로 기입됩니다.

자세한 내용은 SQL Server 설명서에 기여하는 방법을 참조하세요.