【问题标题】:How can I extract the value of a varbinary(max) column?如何提取 varbinary(max) 列的值?
【发布时间】:2015-06-17 18:37:58
【问题描述】:

我有一个varbinary(max) 列,它将图像存储在 SQL 数据库中。

我正在编写一个 newdb 脚本,其中应用程序创建一个新的数据库实例并填充一些表。我正在处理的其中一个表正在初始化该图像列。

为了做到这一点,我使用 select 语句打印列的内容并将内容粘贴到 newdb 脚本的插入语句中。这最初似乎可以正常工作,但图像没有正确加载。

所以我比较了原始数据(5469988)和新数据(21839)的DATALENTH()。似乎 Microsoft SQL Server management Studio - 2014 切断了我为什么在某个时间点从原始数据库复制它的数据。我需要能够获得专栏的全部内容。有什么想法吗?

【问题讨论】:

  • 您的问题是“如何使用 SMS 复制和粘贴大量数据”还是其他问题?
  • @RickS 如果复制和粘贴可以工作,那就太好了,但到目前为止还没有工作,所以看来我需要一个不同的解决方案。

标签: sql sql-server ssms varbinary varbinarymax


【解决方案1】:
select cast(convert(varchar(max), VarBinaryMaxColumn, 1) as xml) from Table

【讨论】:

  • 这仅在 XML 输出的限制设置得足够高(2MB、5MB、无限制)时才有效。这可以在这里设置:选项 > 查询结果 > SQL Server > 结果到网格 > XML 数据(见截图:stackoverflow.com/a/57163349/2470012
【解决方案2】:

不是复制/粘贴,而是右键单击结果并执行“将结果另存为...”,这应该会导出全部内容。有趣的是,将查询输出显式设置为文本或文件仍会截断长数据值。

【讨论】:

  • 我做了这个,尺寸更大:32767。它仍然比原来的小得多:5469988。
  • 如果还是不行,你也可以尝试使用bcp命令创建导出的数据文件,然后在创建空表结构后使用相同的命令将其导入目标。跨度>
  • 不幸的是,当它被部署时,它无法访问文件系统
  • 这不适用于我的 394 kB VARBINARY 示例,结果被截断。有效的是@Dan Leksell 的stackoverflow.com/a/54637194/3588010 下面的答案
【解决方案3】:

如果您复制并粘贴您限制的查询结果选项。大多数列将在一定长度(通常为 256 个字符)后被剪切。

您可以在顶部栏中选择“将结果另存为...”,这将提示您一个数据导出对话框。

您也可以使用数据导出向导。

【讨论】:

  • “将结果另存为”不适用于未处理的 varbinary 输出。导出的数据仍将被截断。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多