본문 바로가기
[2]SW Development Note/[2-2.5]data structure

MSSQL 이미지를로드 할 디렉토리를 한번에 바이너리 테이블로 저장하는 방법

by 오늘도 빛나는 너에게 2020. 6. 17.
728x90

MSSQL 이미지를로드 할 디렉토리를 한번에 바이너리 테이블로 저장하는 방법

--테이블 생성
create table Images (ID_PHOTO nvarchar(max), data varbinary(max));
go
-- 이미지를로드 할 디렉토리. 나머지 부분에서는 @directory 처리
-- 종료 백 슬래시
declare @directory nvarchar(max) = N'C:\new\';
--지정된 디렉토리의 모든 .JPG 파일 이름을 조회. dir 명령의 / b 스위치로 조회
--출력 파일의 데이터는 파일 이름을 저장. 디렉토리는 작은 따옴표를 포함 할 수 있으므로
--문자열 리터럴을 너무 일찍 종료하지 않으려면 REPLACE가 필요
declare @filenames table (ID_PHOTO varchar(max));
declare @shellCommand nvarchar(max) = N'exec xp_cmdshell ''dir ' + replace(@directory, '''', '''''') + '*.jpg /b''';
insert @filenames exec(@shellCommand);
--SQL 문을 구성하고 실행하여 파일 이름과 파일 이름을 로드
--이미지 테이블에 해당 파일. 위의 xp_cmdshell을 통해 dir / b를 호출시에 생성
--항상 마지막 행에서 Null를 얻고. 그래서 fname이 NULL이 아닌지 확인
-- SQL mun-eul guseon
declare @sql nvarchar(max) = '';
with EscapedNameCTE as (select ID_PHOTO = replace(@directory + ID_PHOTO, '''', '''''') from @filenames where ID_PHOTO is not null)
select
    @sql = @sql + N'insert Images (ID_PHOTO, data) values (''' + E.ID_PHOTO + ''', (select X.* from openrowset(bulk ''' + E.ID_PHOTO+ N''', single_blob) X)); '
from
    EscapedNameCTE E;
exec(@sql);




728x90

댓글