5

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

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

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

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

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

4

3 回答 3

2

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

但是,在 SQL Server 2005 中搜索 TEXTCOPY 时,我发现这种替代方法可能会奏效:

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

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

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

于 2008-11-07T13:26:27.240 回答
1

这篇文章“将文本或图像复制到 SQL Server 中或从 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。

文本复制说明:

将单个文本或图像值复制到 SQL Server 中或从 SQL Server 中复制出来。该值是指定“表”的单行(由“where 子句”指定)的指定文本或图像“列”。

如果方向是 IN (/I),则将指定“文件”中的数据复制到 SQL Server 中,替换现有的文本或图像值。如果方向是 OUT (/O),则将文本或图像值从 SQL Server 复制到指定的“文件”中,替换任何现有文件。

于 2008-11-07T13:01:30.893 回答
0

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

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

于 2010-08-02T07:59:13.687 回答