2009-12-29 2 views
9

SQL Server 2000의 BCP 유틸리티를 사용하여 일부 데이터를 익스포트해야합니다. 때로는 데이터에 \ t 및 \ n과 같은 문자가 포함되어 있으며 열 및 행 종결 자로 사용해야합니다. BCP가 데이터를 출력 할 때 터미네이터로 사용하는 문자를 이스케이프 처리하여 다른 프로그램에서 실제로 데이터를 가져올 수 있도록하려면 어떻게해야합니까?터미네이터를 이스케이프 처리하기 위해 bcp.exe 가져 오기

예를 들어, 내 열 중 하나는 텍스트 데이터이며 탭과 줄 바꿈을 포함합니다. BCP는 그 자체를 그대로 내보내고 데이터를 가져 오는 중 혼란을 겪습니다. 데이터가 줄의 중간에서 끝나거나 줄이 명백한 이유없이 추가 열을 포함하기 때문입니다.

매우 비슷하게 보입니다. 매우 데이터 내보내기에 포함 할 기본 기능이 있지만, the command-line options 중 아무 것도 그것을 언급하는 것 같습니다. (왜 그것이 기본값이 아닐까?) 뭔가 빠졌습니까?

답변

-6

탭과 개행 문자가있는 탭과 개행 문자가 포함 된 데이터는 가질 수 없습니다. 그것은 말도 안돼. 탭이 탭이기 때문에 이스케이프 처리가 도움이되지 않습니다. 우리는 여기서 C# 문자열 처리를 말하는 것이 아닙니다. 내가 할 줄 무엇

different terminators 같은 |||/n를 사용하거나 저도 같은 문제를 가지고 해결책을 찾기 위해 오랜 시간 관련 검색 format file

+1

사실은 PostgreSQL에서 COPY FROM을 사용하면 '\ n' 시퀀스를 텍스트 열의 실제 줄 바꿈으로 되돌릴 수 있습니다. 그리고 불행히도 PostgreSQL에서 행 구분 기호를 지정할 수 없습니다. – Kev

+0

또한 다른 종단 코드가 한 가지 해결 방법이지만 실제로 쿼리 후 대체 작업을 수행하는 데 오랜 시간이 걸립니다. BCP가 텍스트 열을 올바르게 이스케이프 처리 할 수 ​​있다면 훨씬 좋을 것입니다. – Kev

+0

osql도 sqlcmd도이 중 하나를 지원하지 않습니다. 예를 들어, 이스케이프 문자로 필드가 끝나면 어떻게 될까요? 그리고 당신이 PostgreSQL 정보를 읽는다면, 그것은 도데이 탈출에 대해 언급합니다 ... SQL Server는 완전히 예측 가능합니다, 그렇지 않습니다? – gbn

-1

를 사용합니다. BCP 마스터에서이 파일을 찾았습니다. 아마 당신도 그것을 시도하고 싶다.

가능한 해결 방법 : http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft.public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

형식의 파일 세부 & 디자인 : http://groups.google.co.uk/groups?q=lindawie+format+file

감사합니다

: http://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

은 일반적으로 당신이 BCP 문제 및 솔루션에 대해 알고 얻기 위해 이러한 링크를 제안 할 수 있습니다

+0

답변이 나와 있지 않은 솔루션이 고장났습니다. – wrschneider

5

전적으로 동의합니다. 이스케이프는 옵션이어야합니다. "탭이나 줄 바꿈으로 데이터를 가질 수 없다"는 말은 내가 들었던 가장 실망스러운 일이다.

  1. 다른 줄 끝을 설정하려면 -r 옵션을 사용하여 : 여기

    이 가능한 솔루션입니다. 무언가
    귀하의 데이터 (#! # $ # % #)에 존재하지 않을 수 있습니다. 여러 개의
    문자를 사용할 수 있다고 생각합니다.
  2. sed 또는 가능한 텍스트 편집기에서 데이터 파일을 열거 나 스크립트를 작성하고 \ n 및 \ t 문자를 이스케이프 처리 된 해당 항목 (\\ n 및 \\ t)으로 바꿉니다. 마지막으로 줄 종결 기호를 \ n으로 바꾸면 좋을 것입니다.
  3. 나는 같은 일이

this article for more information를 살펴 보자 필드 종결 자에 대한 -t 사용에 적용한다고 생각합니다.

1

큰 따옴표 사이에 넣어 경우 여러 개의 문자로 구성된 구분 기호를 사용할 수 있습니다 솔루션 here 발견

bcp MY_TABLE out C:\MY_FILE.txt -S SERVER_IP -d DB_NAME -U MY_USER -P MY_PASSWORD -w -t "&#)^@" -r ">~+!"

.

관련 문제