2008-11-07 55 views
5

我需要從SQL Server 2005數據庫中提取一些BLOB數據,並生成一個SQL腳本以將另一個數據庫中的相同數據插入另一個服務器。在SQL Server中使用純SQL在數據庫之間複製BLOB值

我只允許使用SQL腳本執行此操作,我不能使用任何其他實用程序或使用Java或.NET編寫程序來執行此操作。

我的另一個重大限制是我運行腳本時無法訪問原始數據庫(原始BLOB數據所在的位置),將BLOB數據複製到目標數據庫,所以數據應該已經被編碼在SQL腳本文件中。

總結:有沒有辦法將BLOB數據編碼到文本中,以便我可以將它轉儲到腳本文本文件中的SQL INSERT命令中並運行它?

如果需要,我可以運行特殊的T-SQL語句和存儲過程。

回答

2

TEXTCOPY是在SQL Server包含在SQL Server 7.0和2000年的樣本應用程序,但無法提供2005年

然而,在SQL Server 2005 google搜索TEXTCOPY,我發現這個替代方案,可能做的伎倆:

http://sequelserver.blogspot.com/2007/01/texcopy-sql-server-2005.html

它依賴於寫入和讀取從文件系統,這在我的情況是不理想的二進制數據(理想情況下,我想編碼與SQL腳本文本文件本身的二進制數據),但它的迄今爲止我找到的最好的。

這裏有一個關於如何使用大量OPENROWSET做的二進制文件的導入/導出操作的另一個極好來源: http://msdn.microsoft.com/en-us/library/ms191184.aspx

1

本文「Copy Text or Image into or out of SQL Server」可以幫助:

您可以在TEXTCOPY命令行工具,在存儲過程中整合:

CREATE PROCEDURE sp_textcopy (
    @srvname  varchar (30), 
    @login  varchar (30), 
    @password varchar (30), 
    @dbname  varchar (30), 
    @tbname  varchar (30), 
    @colname  varchar (30), 
    @filename varchar (30), 
    @whereclause varchar (40), 
    @direction char(1)) 

AS 

DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
     'textcopy /S ' + @srvname + 
     ' /U ' + @login + 
     ' /P ' + @password + 
     ' /D ' + @dbname + 
     ' /T ' + @tbname + 
     ' /C ' + @colname + 
     ' /W "' + @whereclause + 
     '" /F ' + @filename + 
     ' /' + @direction 
EXEC master..xp_cmdshell @exec_str 

你必須改變/擴展它一點點,以將創建的文件讀入另一個數據庫。

由於Vinko在評論中寫入此答案,請記住,這需要在表面區域配置中啓用xp_cmdshell。 TEXTCOPY的

說明:

複製一個文本或圖像值流入或流出的SQL Server。值 是指定的「表」的單個行(由 「where子句」指定)的指定文本或圖像「列」。

如果方向是IN(/ I)然後,從指定的「文件」的數據被複制 到SQL Server,替換現有的文本或圖像值。如果 方向爲OUT(/ O),則將文本或圖像值從 SQL Server複製到指定的「文件」中,替換任何現有文件。

+0

這要求啓用xp_cmdshell的在表面區域配置 – 2008-11-07 13:07:01