从Varbinary Column中提取数据并将其保存为原始格式

时间:2016-02-29 13:06:31

标签: sql-server sql-server-2008-r2 bcp varbinary

我正在使用Microsoft SQL Server 2008 R2。我在表varbinary中有一个RelatedData_imgReminderimage。在该列中,我存储Word,Excel文件,图像(png,bmp或jpg格式)或文本文件等。现在我想使用命令将该列中的数据存储到磁盘。

我尝试使用此BCP命令:

bcp "SELECT RelatedData_img FROM Reminderimage.dbo.Reminderimage" queryout "D:\testing6" -n -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest

我得到包含xml文件的文件。我尝试过-N-c而不是-n。但是我得到了相同的xml文件。

如何以原始格式(word,excel,jpg等)获取文件。我想一直存储所有列内容,因为我不知道哪一行有哪个格式文件。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

  • Create a format file用于包含一列的查询(例如C:\Temp\xyz.fmt)。
  • 编辑格式文件以将前缀设置为0字节(例如,使用记事本)。
SET NOCOUNT ON;
CREATE TABLE tt(the_file VARBINARY(MAX) NOT NULL);
GO
SET NOCOUNT ON;
DECLARE @bcp_cmd VARCHAR(8000);
SET @bcp_cmd='BCP '+QUOTENAME(DB_NAME())+'.dbo.tt format nul -T -N -f "C:\Temp\xyz.fmt" -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest';
EXEC master.sys.xp_cmdshell @bcp_cmd;
DROP TABLE tt;
GO
-- This creates C:\Temp\xyz.fmt file with prefix=8... Change the 8 to 0 in it.
  • 在BCP导出命令中使用格式文件。您必须使用游标循环浏览要导出的记录,并为要生成的每个文件生成动态BCP命令。这是一个选择问题中表格第一行的示例,并将其导出D:\testing6
SET NOCOUNT ON;
DECLARE @bcp_cmd VARCHAR(8000);
SET @bcp_cmd='BCP "SELECT TOP 1 RelatedData_img FROM Reminderimage.dbo.Reminderimage" QUERYOUT "D:\testing6" -T -fC "C:\Temp\xyz.fmt" -S PCname\SQLMANAGEMENT,25222 -Utest -Ptest';
EXEC master..xp_cmdshell @bcp_cmd;
GO