2011-08-12 13 views
1

한 데이터베이스에서 다른 데이터베이스로 많은 양의 파일을 가져 오려고합니다. 원본 데이터베이스는 파일 이름을 데이터베이스 테이블에 저장하고 실제 파일은 디스크의 어딘가에 저장합니다.SQL Server 2008 데이터베이스로 파일 가져 오기

새 데이터베이스는 파일을 저장하기 위해 filestream을 사용합니다.

이전에 OPENROWSET을 사용하여 새 데이터베이스로 파일을 가져 왔지만이 경우 수동으로 전체 경로를 수동으로 제공했습니다.

이 경우처럼 디스크에있는 디렉토리의 위치와 이전 DB의 파일 이름을 결합하여 경로를 동적으로 만들 수 있다고 생각한 파일이 여러 개 있습니다.

그러나 OPENROWSET에서는 문자열을 연결할 수 없습니다. 동적 SQL (http://stackoverflow.com/questions/6621579/t-sql-issue-with-string-concat)을 사용하는 방법을 찾아 냈습니다.

그러나 이전 데이터베이스 테이블의 정보를 OPENROWSET과 결합하여 새 데이터베이스에 파일을 삽입하는 방법을 모르겠습니다. 이런 식으로

create table #Files 
(
    IssueId int not null, 
    FileName nvarchar(12) not null, 
    FullPath nvarchar(255) not null 
) 

insert into #Files 
select IssueId, FileName, @FilePath + '\' + FileName 
from OLDDBO.dbo.Files 

, 나는 ID, 파일 이름과 전체 경로가 있습니다

내 현재의 생각이 같은 것입니다. 그러나이 세 가지 항목을 이진 데이터와 함께 새로운 DB에 삽입하려면 어떻게해야합니까? 누군가 도울 수 있기를 바랍니다.

답변

0

동적이라고 말하면 SQL을 구성한 다음 실행해야한다는 의미입니다. 따라서, 귀하의 예제를 사용하여, 당신은 같은 것을 할 필요가있을 것이다 :

 

declare @sql varchar(max) 

set @sql = 'insert into #Files 
select IssueId, FileName, @FilePath + '\' + FileName, 
CAST(fileStreamField AS VARBINARY(MAX))  
FROM OPENROWSET(BULK '' + @FilePath + '\' + FileName + '',SINGLE_BLOB) 
from OLDDBO.dbo.Files' 

execute(@sql) 
 

그래서 당신이 기본적으로하고있는 것은 그것을 실행 한 후 삽입 SQL을 구성하고있다. 파일 경로 앞에 double ''을 적어 두십시오. 출력 경로에 결국 작은 따옴표가 있습니다.

구문은 검증되지 않은, 그래서 밖으로 작동하는지 알려주세요 ...

PS. #Files에 fileStream에 대한 새 필드를 추가해야합니다.

+0

아직 몇 가지 따옴표가 빠져 있지만 이것이 실제로 해결책이었습니다. 감사! – Pieter

관련 문제