2011-08-12 75 views
1

我試圖將大量文​​件從一個數據庫導入到另一個數據庫中。原始數據庫將文件名存儲在數據庫表中,並將實際文件存儲在磁盤上的某處。將文件導入到SQL Server 2008數據庫

新數據庫使用文件流來存儲文件。

我已經使用OPENROWSET將文件導入到新的數據庫中,但在這些情況下,我提供了完全正常工作的完整路徑。

由於在這種情況下,我想我可以動態地生成將磁盤上的目錄位置與舊數據庫的文件名相結合的路徑。

但是,事實證明,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,文件名和完整路徑。但是,如何將這三個項目與二進制數據一起插入到新的數據庫中?我希望有人可以幫助

回答

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

相關問題