이번에 FILESTREAM으로 저장된 내용을 다른 위치에 있는 곳에 복사하는 작업을 수행하게 됐다.
문제는 FILESTREAM 데이터다 보니, 실제 파일 사이즈의 데이트를 주고 받게 되서,
단순한 INSERT INTO SELECT 로는 처리할 수 없었다.
SELECT를 통해서 데이터를 수집할 때, 메모리가 Full 나버리는 안타까운 사태.
그래서 한 줄씩 읽어 밀어 넣는 방법을 쿼리로 작성해봤다.
DECLARE @AllIndex TABLE (
id numeric(18,0)
)
DECLARE @curId numeric(18,0)
INSERT INTO @AllIndex
SELECT [id]
FROM [source].[webgrab].[dbo].[TB_IMGINFO] ORDER BY id
DECLARE CURSOR_Id CURSOR FOR
SELECT id FROM @AllIndex
OPEN CURSOR_Id
FETCH NEXT FROM CURSOR_Id INTO @curId
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO TB_IMGINFO
SELECT
[RowId]
,[baseid]
,[itemid]
,[filename]
,[fileindex]
,[fileurl]
,[imgdata]
,[chgcode]
,[chgcodeid]
FROM
[source].[webgrab].[dbo].[TB_IMGINFO]
WHERE
id = @curId
Print @curId
FETCH NEXT FROM CURSOR_Id INTO @curId
END
CLOSE CURSOR_Id
DEALLOCATE CURSOR_Id
ID 역할을 할만한 중첩되지 않는 값을 먼저 변수에 담고, 그 변수의 내용을 커서로 돌려, 하나씩 Insert.
기왕이면 Transaction까지 넣는다면 좋겠지만, 일단, 데이터만 옮기면 끝이라.
728x90