2008-11-07 54 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