아래의 방식은 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











덧글