【问题标题】:How do I export a BLOB varbinary(max) column to a CSV or excel without using xp_cmdshell?如何在不使用 xp_cmdshell 的情况下将 BLOB varbinary(max) 列导出到 CSV 或 excel?
【发布时间】:2015-08-02 06:33:51
【问题描述】:

我被禁止使用 xp_cmdshell。我在 SQL Server 2008R2 实例中有一个表,它有一个 varbinary(max) BLOB 列,我需要将其输出为 CSV 或 Excel 格式。不知道该怎么做。我可以远程登录服务器并在命令提示符下运行 SQLCmd,但我以前从未转换过这种类型的数据,所以我不确定语法。任何帮助将不胜感激。提前致谢!!

【问题讨论】:

    标签: sql sql-server excel sql-server-2008 blob


    【解决方案1】:

    我会改用BCP.exe。它是一个命令行工具,专为您想要做的事情而设计。示例:

    bcp.exe [db1].[dbo].[table1] out file1.csv -n -T -S"server1"
    

    如果您希望每个文件有一行(我不会问您为什么要这样做),最好的方法是使用脚本(powershell/wscript/jscript/etc.)并解析您的文件,行按行。

    另一种非最佳方式是生成循环遍历每一行的 TSQL(可能使用游标),通过 queryout 打印出 bcp.exe 语句。这假设您可以定义某种键来隔离单行。见下面的伪代码:

    -- create and wrap your cursor around this
    select 'bcp.exe "select * from dbo.table1 where pkcol = ' + cast(@pkcol as varchar) + ' queryout file1.csv -n -T -S"server1"'
    from dbo.table1
    where col1 = @pkcol
    

    【讨论】:

    • 感谢您的建议。如果我想每行输出一个包含 BLOB 数据的文件,我该怎么做呢?
    • 您可以编写一个查询来生成您的 bcp.exe,而使用 queryout 选项。见上面的编辑。
    • 游标成功地为每行生成了包含 blob 数据的脚本,但生成的 csv 或 excel 文件乱码且不可读。我们的数据库通过 TDE 加密。想知道这是否会导致问题?
    • 使用 -C 开关将 varbinary 数据转换为 excel 或 csv 文件中的原始 blob 列数据。虽然可读,但它不是我需要的实际文件数据。
    • 您可能需要先创建一个格式文件,以便它以正确的数据类型导出数据,然后使用相同的格式文件进行导入。顺便说一句,TDE 将加密不在传输中的静态数据(数据库数据/日志/备份文件)。
    猜你喜欢
    • 2019-12-04
    • 2020-03-27
    • 1970-01-01
    • 2012-09-24
    • 2015-07-23
    • 2016-10-30
    • 2020-10-19
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多