다음을 통해 공유


필드 및 행 종결자 지정(SQL Server)

적용 대상: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

문자 데이터 필드의 경우 데이터 파일의 각 필드 끝은 필드 종결자를 그리고 각 행의 끝은 행 종결자를 사용해 표시할 수 있습니다. 종결 문자는 한 필드 또는 행이 끝나고 다른 필드 또는 행이 시작되는 데이터 파일을 읽는 프로그램을 나타내는 한 가지 방법입니다.

중요

원시 또는 유니코드 원시 형식을 사용하는 경우 필드 종결자 대신 길이 접두사를 사용합니다. 네이티브 형식 데이터 파일은 Microsoft SQL Server의 내부 이진 데이터 형식으로 저장되므로 네이티브 형식 데이터가 종결자와 충돌할 수 있습니다.

종결 표시로 지원되는 문자

bcp 명령, BULK INSERT 문 및 OPENROWSET 대량 행 집합 공급자는 다양한 문자를 필드 또는 행 종결자로 지원하며 항상 각 종결자의 첫 번째 인스턴스를 찾습니다. 다음 표에서는 종결자로 지원되는 문자를 나열합니다.

종결 문자 에 의해 표시됨 설명
\t 기본 필드 종결자입니다.
줄 바꿈 문자 \n 기본 행 종결자입니다.
캐리지 리턴/줄 바꿈 \r
백슬래시 1 \
Null 종결자(보이지 않는 종결자) 2 \0
인쇄 가능한 문자(null, 탭, 줄바꿈 및 캐리지 리턴을 제외하고 컨트롤 문자는 인쇄할 수 없음) (*, A, t, l등)
최대 10개의 인쇄 가능 문자의 문자열(앞에 나열된 종결자 일부 또는 전부 포함) (**\t**, end, !!!!!!!!!!, \t-\n등)

1 , t, nr0 문자만 \0백슬래시 이스케이프 문자와 함께 작동하여 컨트롤 문자를 생성합니다.

2 인쇄할 때 null 컨트롤 문자(\0)가 표시되지 않더라도 데이터 파일의 고유 문자입니다. 즉, null 제어 문자를 필드 또는 행 종결자로 사용하는 것은 필드 또는 행 종결자가 전혀 없는 것과 다릅니다.

중요

종결자 문자가 데이터 내에서 발생하는 경우 문자는 데이터가 아닌 종결자로 해석되고 해당 문자 뒤의 데이터는 다음 필드 또는 레코드에 속하는 것으로 해석됩니다. 따라서 종결자를 신중하게 선택하여 데이터에 표시되지 않게 합니다. 예를 들어 하위 서로게이트 필드 종결자는 데이터에 낮은 서로게이트가 포함된 경우 필드 종결자에 적합하지 않습니다.

행 종결자 사용

행 종결자는 마지막 필드의 종결자와 같은 문자일 수 있습니다. 그러나 일반적으로 명확한 행 종결자가 유용합니다. 예를 들어, 테이블 형식 출력을 생성하려면 각 행의 마지막 필드를 줄 바꿈 문자(\n)로 종료하고, 다른 모든 필드는 탭 문자(\t)로 종료합니다. 각 데이터 레코드를 데이터 파일의 자체 줄에 배치하려면 이 조합을 \r\n 행 종결자로 지정합니다.

참고

ko-KR: bcp를 대화형으로 사용하고 \n (줄 바꿈)을 행 종결자로 지정하면, bcp는 자동으로 앞에 \r (캐리지 리턴) 문자를 접두사로 붙여서 행 종결자가 \r\n가 됩니다.

대량 내보내기에 대한 종결자 지정

char 또는 nchar 데이터를 대량으로 내보내고 기본이 아닌 종결자를 사용하려는 경우 bcp 명령에 종결자를 지정해야 합니다. 다음과 같은 방법으로 종결자를 지정할 수 있습니다.

  • 필드 단위로 종결자를 지정하는 서식 파일을 사용합니다.

    참고

    서식 파일을 사용하는 방법에 대한 자세한 내용은 파일 서식을 참조하여 데이터를 가져오거나 내보냅니다(SQL Server).

  • 서식 파일이 없는 경우 다음과 같은 대안을 사용할 수 있습니다.

    • -t 스위치를 사용하여 행의 마지막 필드를 제외한 모든 필드에 대한 필드 종결자를 지정하고, -r 스위치를 사용하여 행 종결자를 지정합니다.

    • -c 스위치 없이 문자 형식 스위치 (-w 또는 -t)를 사용하고, 필드 종료자를 탭 문자 \t로 설정하십시오. 이는 지정하는 -t\t것과 같습니다.

      참고

      -n (네이티브 데이터) 또는 -N (유니코드 네이티브) 스위치를 지정하면 종결자가 삽입되지 않습니다.

    • 대화형 bcp 명령에 in 또는 out 옵션이 포함되었지만, 서식 파일 스위치(-f) 또는 데이터 형식 스위치(-n, -c, -w, -N)가 없고, 접두사 길이 및 필드 길이를 지정하지 않기로 선택한 경우, 명령은 각 필드의 필드 종결자를 묻는 프롬프트를 표시하며 기본값은 없음입니다.

      Enter field terminator [none]:

      일반적으로 기본값은 적합한 선택입니다. 그러나 char 또는 nchar 데이터 필드의 경우 다음 하위 섹션인 "종결자 사용에 대한 지침"을 참조하세요. 컨텍스트에서 이 프롬프트를 보여 주는 예제는 bcp(SQL Server)를 사용할 때 호환성 데이터 형식 지정을 참조하세요.

      참고

      bcp 명령의 모든 필드를 대화형으로 지정한 후 명령에서 각 필드에 대한 응답을 비 XML 서식 파일로 저장하라는 메시지를 표시합니다. 비 XML 서식 파일에 대한 자세한 내용은 비 XML 서식 파일 사용(SQL Server)을 참조하세요.

종료자 사용에 대한 지침

경우에 따라 종결자는 char 또는 nchar 데이터 필드에 유용합니다. 예시:

  • 접두사 길이 정보를 이해하지 못하는 프로그램으로 가져올 데이터 파일에 null 값이 포함된 데이터 열의 경우

    null 값을 포함하는 모든 데이터 열은 가변 길이로 간주됩니다. 접두사 길이가 없는 경우 데이터가 올바르게 해석되도록 Null 필드의 끝을 식별하는 종결자가 필요합니다.

  • 많은 행에서 공백이 부분적으로만 사용되는 긴 고정 길이 열의 경우입니다.

    이 경우 종결자를 지정하면 스토리지 공간을 최소화하여 필드를 가변 길이 필드로 처리할 수 있습니다.

대량 내보내기를 위한 행 종결자로 지정 \n

대량 내보내기를 위해 행 종결자로 \n을 지정하거나 기본 행 종결자를 암시적으로 사용하는 경우 bcp는 CRLF(캐리지 리턴 줄 바꿈 조합)를 행 종결자로 출력합니다. LF(줄 바꿈) 문자만 행 종결자로 출력하려면(Unix 및 Linux 컴퓨터에서 일반적임) 16진수 표기법을 사용하여 LF 행 종결자를 지정하세요. 예시:

bcp -r '0x0A'

예시

다음은 쉼표가 필드 종결자로, 줄 바꿈 문자(\n)가 행 종결자로 포함된 문자 형식을 사용하여 AdventureWorks2022.HumanResources.Department 테이블에서 Department-c-t.txt 데이터 파일로 데이터를 대량으로 내보내는 예제입니다.

bcp 명령에는 다음 스위치가 포함됩니다.

스위치 설명
-c 데이터 필드가 데이터 문자로 로드되도록 지정합니다.
-t , 쉼표( , )를 필드 종결자로 지정합니다.
-r \n 행 종결자를 줄 바꿈 문자로 지정합니다. 기본 행 종결자이므로 선택 사항으로 지정합니다.
-T bcp 유틸리티가 통합 보안을 사용하는 트러스트된 연결을 통해 SQL Server 로 연결되도록 지정합니다. -T이(가) 지정되지 않은 경우, 성공적으로 로그인하려면 -U-P을(를) 지정해야 합니다.

자세한 내용은 bcp Utility를 참조하세요.

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

bcp AdventureWorks2022.HumanResources.Department out C:\myDepartment-c-t.txt -c -t, -r \n -T

이렇게 하면 각각 4개 필드로 된 16개의 레코드가 포함된 Department-c-t.txt가 생성됩니다. 필드는 쉼표로 구분됩니다.

대량 가져오기를 위한 구분자 지정

char 또는 nchar 데이터를 대량으로 가져오는 경우 대량 가져오기 명령은 데이터 파일에 사용되는 종결자를 인식해야 합니다. 종결자를 지정하는 방법은 다음과 같이 대량 가져오기 명령에 따라 달라집니다.

  • bcp

    가져오기 작업의 종결자를 지정하면 내보내기 작업과 동일한 구문이 사용됩니다. 자세한 내용은 이 문서의 앞부 분에 있는 대량 내보내기에 대한 종결자 지정을 참조하세요.

  • BULK INSERT

    다음 표에 표시된 한정자를 사용하여 형식 파일의 개별 필드 또는 전체 데이터 파일에 대해 종결자를 지정할 수 있습니다.

    한정자 설명
    FIELDTERMINATOR = '<field_terminator>' 문자 및 유니코드 문자 데이터 파일에 사용할 필드 종결자를 지정합니다.

    기본값은 \t(탭 문자)입니다.
    ROWTERMINATOR = '<row_terminator>' 문자 및 유니코드 문자 데이터 파일에 사용할 행 종결자를 지정합니다.

    기본값은 \n(줄 바꿈 문자)입니다.

    자세한 내용은 BULK INSERT를 참조하세요.

  • INSERT ... SELECT * FROM OPENROWSET(BULK...)

    대량 행 집합 공급자의 OPENROWSET 경우 종결자는 서식 파일에서만 지정할 수 있습니다(대용량 개체 데이터 형식을 제외하고 필요). 문자 데이터 파일이 기본이 아닌 종결자를 사용하는 경우 서식 파일에서 정의해야 합니다. 자세한 내용은 서식 파일 만들기(SQL Server)서식 파일을 사용하여 데이터 대량 가져오기(SQL Server)를 참조하세요.

    OPENROWSET BULK 절에 대한 자세한 내용은 OPENROWSET (BULK)을 참조하세요.

대량 가져오기를 위한 행 종결자로 지정 \n

대량 가져오기를 위해 행 종결자로 지정 \n 하거나 기본 행 종결자를 암시적으로 사용하는 경우 bcpBULK INSERT 문에는 행 종결자로 CRLF(캐리지 리턴 라인 피드 조합)가 필요합니다. 원본 파일이 Unix 및 Linux 컴퓨터에서 생성된 파일에서 일반적인 것처럼 행 종결자로 LF(줄 바꿈 문자)만 사용하는 경우 16진수 표기법을 사용하여 LF 행 종결자를 지정합니다. 예를 들어, BULK INSERT 문에서와 같이.

ROWTERMINATOR = '0x0A'

예시

이 섹션의 예에서는 앞의 예에서 생성한 Department-c-t.txt 데이터 파일의 문자 데이터를 myDepartment 예제 데이터베이스의 AdventureWorks2022 테이블로 대량으로 가져옵니다. 예를 실행하려면 이 테이블을 만들어야 합니다. 스키마 아래에 dbo 이 테이블을 만들려면 SQL Server Management Studio 쿼리 편집기에서 다음 코드를 실행합니다.

USE AdventureWorks2022;
GO

DROP TABLE myDepartment;

CREATE TABLE myDepartment
(
    DepartmentID SMALLINT,
    Name NVARCHAR (50),
    GroupName NVARCHAR (50) NULL,
    ModifiedDate DATETIME CONSTRAINT
        DF_AddressType_ModifiedDate DEFAULT (GETDATE()) NOT NULL
);
GO

A. bcp를 사용하여 구분 기호를 대화식으로 지정

다음 예에서는 Department-c-t.txt 명령을 사용하여 bcp 데이터 파일을 대량으로 가져옵니다. 이 명령은 대량 내보내기 명령과 동일한 명령 스위치를 사용합니다. 자세한 내용은 이 문서의 앞부 분에 있는 대량 내보내기에 대한 종결자 지정을 참조하세요.

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

bcp AdventureWorks2022.dbo.myDepartment in C:\myDepartment-c-t.txt -c -t , -r \n -T

B. BULK INSERT를 사용하여 상호 작용하며 종결자 지정하기

다음 예제에서는 다음 표에 표시된 한정자를 사용하는 Department-c-t.txt 문을 사용하여 BULK INSERT 데이터 파일을 대량으로 가져옵니다.

옵션 속성
DATAFILETYPE = 'char' 데이터 필드가 데이터 문자로 로드되도록 지정합니다.
FIELDTERMINATOR = ',' 쉼표(,)를 필드 종결자로 지정합니다.
ROWTERMINATOR = '\n' 행 종결자를 줄 바꿈 문자로 지정합니다.

SQL Server Management Studio 쿼리 편집기에서 다음 코드를 실행합니다.

USE AdventureWorks2022;
GO

BULK INSERT myDepartment FROM 'C:\myDepartment-c-t.txt'
WITH (
     DATAFILETYPE = 'char',
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n'
);
GO