【问题标题】:Extract Data from Varbinary Column and save it in its original format从 Varbinary 列中提取数据并以原始格式保存
【发布时间】:2016-02-29 13:06:30
【问题描述】:

我正在使用 Microsoft SQL Server 2008 R2。我在表Reminderimage 中有一个varbinaryRelatedData_img。在该列中,我存储 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 等)。我想一次存储所有列内容,因为我不知道哪一行有哪个格式文件。

我怎样才能做到这一点?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 我已经尝试过你的建议,它只是将一个文件复制到 D:\,名称为 testing6。如何决定这个文件的扩展名?
    • @ITresearcher 如果您没有将文件格式存储在数据库中,则必须自己检查二进制数据。 SQL Server 中没有自动检测文件格式的功能。
    • 在上述站点中,我没有找到创建列格式的方法。解释了为表创建 fmt 文件的过程。您能帮我在我的情况下如何创建“RelatedData_img”列的 fmt 文件吗?
    • @ITresearcher 创建格式文件的语句在我的回答中(第一个sn-p)。
    • fmt 文件的内容如给定,10.0 3 1 SQLINT 0 4 "" 1 Imageid "" 2 SQLINT 0 4 "" 2 Autonumber "" 3 SQLIMAGE 0 0 "" 3 RelatedData_img。当我在您的第二个查询中运行它时,我收到错误,“只有在复制到服务器时才可能跳过主机文件列”
    猜你喜欢
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多