SQL Image 데이터 형식의 이미지를 파일로 쉽게 만들기 ( 2005 이상 )

아래의 방식은 SQL 2005 이상에서 가능합니다. 2000에서는 varchar , varbinary 크기가 8000 이상 지정되지 않아 , 8K 이상의 이미지 저장이 어렵습니다. 2000 테이블에 있는 정보라면 , 2005 이상의 SQL 서버로 테이블을 이전하고 아래 작업을 진행합니다.

DECLARE
 @IMG_PATH VARCHAR(MAX),
 @TIMESTAMP VARCHAR(MAX),
 @ObjectToken INT,
 @FILENAME varbinary(MAX)---new variable here

DECLARE IMGPATH CURSOR FAST_FORWARD FOR
  SELECT 저장할파일명
        ,저장된이미지형식필드---column selected here
  FROM 테이블이름  
  
OPEN IMGPATH

FETCH NEXT FROM IMGPATH INTO @IMG_PATH ,@FILENAME ---new column in cursor with new variable

WHILE @@FETCH_STATUS = 0
 BEGIN
  SET @TIMESTAMP = 'd:\sign\' +@IMG_PATH+ '.bmp'

  PRINT @TIMESTAMP
  

  EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
  EXEC sp_OASetProperty @ObjectToken, 'Type', 1
  EXEC sp_OAMethod @ObjectToken, 'Open'
  EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @FILENAME --new variable here
  EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2
  EXEC sp_OAMethod @ObjectToken, 'Close'
  EXEC sp_OADestroy @ObjectToken

  FETCH NEXT FROM IMGPATH INTO @IMG_PATH ,@FILENAME --new variable here also
 END

CLOSE IMGPATH
DEALLOCATE IMGPATH


위를 실행하려고 하면 에러가 발생할 수 있다. 이는 인젝션 공격등에 악용될 특정 기능이 활성화되지 않아서 발생하는 문제인데 아래와 같이 해결하면 됩니다.

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO


덧글

댓글 입력 영역