我需要从SQL Server 2005数据库中提取一些BLOB数据,并生成一个SQL脚本,将相同的数据插入到另一个服务器的另一个数据库中。

我只允许使用SQL脚本执行此操作,我不能使用任何其他实用程序或使用Java或.NET编写程序来执行此操作。

我的另一个重要限制是,当我运行脚本时,我无法访问原始数据库(原始BLOB数据所在的位置),将BLOB数据复制到目标数据库,因此数据应该已经存在在SQL脚本文件中编码。

总结:有没有办法将BLOB数据编码为文本,以便我可以将其转储到脚本文本文件中的SQL INSERT命令中并运行它?

如果需要,我可以运行特殊的T-SQL语句和存储过程。

有帮助吗?

解决方案

TEXTCOPY是SQL Server 7.0和2000中包含的示例应用程序,但在SQL Server 2005中不再可用。

然而,在SQL Server 2005中使用Google搜索TEXTCOPY,我发现这个替代方案可以解决这个问题:

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

它依赖于从文件系统中编写和读取二进制数据,在我的情况下这是不理想的(理想情况下我想用SQL脚本文本文件本身编码二进制数据),但它是我发现的最好的到目前为止。

这是另一个关于如何使用BULK OPENROWSET进行二进制导入/导出操作的好资料: http://msdn.microsoft.com/en-us/library/ms191184。 ASPX

其他提示

本文“将文本或图像复制到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中或从中复制出来。价值 是单行的指定文本或图像“列”(由。指定) 指定'table'的“where子句”。

如果方向是IN(/ I),那么来自指定“文件”的数据是 复制到SQL Server,替换现有的文本或图像值。如果 方向为OUT(/ O),然后从中复制文本或图像值 SQL Server进入指定的'文件',替换任何现有文件。

看一下这个问题并在页面上搜索bcp - 有varbinary(max)导入和导出的例子(这是这些列的新标准类型)。您可以运行任意查询以进行导出。

如何插入使用sql server management studio 将blob导入数据库

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top