BCP 또는 SQL Server Management Studio를 사용하여 SQL Server에서 BLOB 데이터를 가져오려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/2404709

문제

이 질문이 이미 요청되었다면 죄송하지만 어디서도 찾을 수 없습니다.파일을 BLOBS로 저장하는 테이블이 있습니다.파일을 보유하는 열은 이미지 데이터 유형입니다.열에서 이진 데이터를 추출하여 실제 파일로 변환하고 싶습니다.가능하다면 BCP나 관리 스튜디오를 통해 이 작업을 수행하는 것이 이상적입니다.

BCP를 사용해 보았지만 어떤 이유로 Office 문서를 꺼내려고 하면 Word에서 해당 문서가 손상되었다고 생각합니다.지금까지 제가 시도한 것은 다음과 같습니다(분명히 무고한 사람들을 보호하기 위해 값이 변경되었습니다 :):

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -n -S server -U username -P password

그런데 이게 작동하지 않나요?이견있는 사람?

편집하다 -n 기본 플래그가 필요하지 않은 것으로 나타났습니다.또한 BCP는 기본적으로 이미지 열에 4바이트 접두사를 포함하려고 시도합니다. 실제로 이 접두사는 0으로 설정됩니다.

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]:
Enter prefix-length of field document_binary [4]: 0
Enter length of field document_binary [0]:
Enter field terminator [none]:
도움이 되었습니까?

해결책

나는 내 자신의 질문에 대답하고있다.

-N 기본 플래그가 필요하지 않다는 것이 밝혀졌습니다. 또한 BCP는 이미지 열에 기본적으로 4 바이트 접두사를 포함 시키려고합니다. 실제로이 세트를 0으로 원합니다.

bcp "select document_binary_data from database where id = 12345" queryout "c:\filename.doc" -S server -U username -P password
Enter the file storage type of field document_binary [image]:
Enter prefix-length of field document_binary [4]: 0
Enter length of field document_binary [0]:
Enter field terminator [none]:

다른 팁

C#/.NET 코드를 사용하여 이 작업을 수행할 수 있는 경우 다음 KB 문서가 도움이 될 수 있습니다.

http://support.microsoft.com/kb/317016

분명히 BCP와 형식 파일을 사용하여 이와 같은 작업을 수행할 수 있지만 IIRC 형식 파일은 열에서 가져올 것으로 예상되는 정확한 바이트 수로 미리 채워져야 하므로 매우 비실용적입니다.

선택할 수 있는 또 다른 옵션은 2008에서 FILESTREAM을 사용하는 것입니다. 또는 조만간 2008로 마이그레이션할 계획이 없다면 문서를 파일 시스템에 저장하고 해당 문서에 대한 포인터를 데이터베이스에 저장하는 것입니다.예, 여기에는 장단점이 있습니다. 하지만 현재까지 모든 프로젝트에서 우리가 선택한 방식입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top