0

레거시 SQL Server 2000 데이터베이스를 SQL Server 2008로 변환합니다. 이진 파일 (JPG, BMP, DOC 및 PDF)은 IMAGE 열에 저장됩니다 (해당 데이터 형식에는 이 옵션은 변경할 수 없습니다).SQL Server IMAGE 데이터 형식 변환 문제

이 데이터는 기본적으로 기본

INSERT INTO [image] Values (SELECT [image] from legacy_db); 

직선 IMAGEIMAGE에 푸시와 함께 새로운 시스템을 삽입됩니다.

전환이 잘 진행되고있었습니다. 새 시스템에서는 JPG, BMP 및 DOC 파일 형식이 문제없이 열렸습니다. PDF는 악몽이었습니다.

PDF 레코드의 경우 SQL Server 2008로 이동 된 행의 대부분은 SQL Server 2000 데이터베이스에서 행이 동일한 행보다 길며 DATALENGTH()입니다.

사람이 이유에 대한 단서가 있습니까?

답변

1

DATALENGTH() 문제는 확실하지 않지만 해결 방법은 PDF 파일이 2000 데이터베이스에서 올바른지 (확인한 것으로 가정) 앱에서 해당 값을 가져 와서 다시 시도해 볼 수 있습니다. INSERT/SELECT를 수행하는 대신 앱에서 새 테이블에 저장합니다.

+0

저는 실제로 이것을 고려했습니다. 마이그레이션 할 약 1000 개의 PDF 레코드가 있으며 손으로 그렇게하는 것에 대한 생각은 어렵습니다. 손으로 – paparush

+0

? 응? 앱에서 검색어와 동일한 일련의 행을 반복 할 수 있습니다. 손으로 아무것도 수행하지 않아도됩니다. VB, C#, PowerShell, 심지어 VBScript로이 작업을 수행 할 수 있어야합니다 ... –

+0

Aaron, 답장을 보내 주셔서 감사합니다. 여기서 차이점을 이해하도록 도와 주시겠습니까? 스트레이트 TSQL보다는 .NET SQLClient 클래스를 사용하여 C#에서이 마이그레이션을 작성하면 Select와 Insert로 끝날 것입니다. 추상화 레이어를 추가하면 무엇을 얻을 수 있는지 이해하도록 도와주세요. C#에서이 작업을 수행하면 Origin에서 바이트를 읽을 수 있었고 대상에 밀어 넣어야하는 바이트 수를 정확히 알 수있었습니다. 그게 당신이 말하는거야? 감사. – paparush

0

PDF의 BOF 표식 및 EOF 표식을 찾기위한 함수를 작성하여이 문제를 해결했습니다 (마지막으로 찾을 수 있도록 여러 개의 EOF 표식이있을 수 있음). 2 개의 오프셋 (offset)의 사이의 바이트를 새로운 바이트 배열에 넣고, 새로운 바이트 배열로 BLOB 필드를 UPDATE하십시오. 그런 다음 새 시스템에서 PDF가 열립니다.