2011-08-12 11 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、ファイル名と完全なパスを持っている:

私の現在の考えは、このようなものです。しかし、これらの3つの項目をバイナリデータと共に新しい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を構築し、それを実行しています。ファイルパスの前に二重の ''があることに注意してください。つまり、出力文に最終的に一重引用符があります。

構文がテストされていないので、それがうまくいくなら、私に知らせて...

PS。 #FilesのfileStreamに新しいフィールドを追加する必要があります

+0

まだ引用符がいくつかありませんでしたが、これは確かに解決策でした。ありがとう! – Pieter

関連する問題