【问题标题】:Generate INSERT for "image" type in MSSQL (Java)在 MSSQL (Java) 中为“图像”类型生成 INSERT
【发布时间】:2018-10-15 13:59:33
【问题描述】:

我有一个数据库,其中表的列之一是“图像”类型。我把编码的pdf文件放在那里。

我的目标是在 Java 应用程序控制台中打印 INSERT STATEMENT,其中包含我表中的所有数据(因此与 Management Studio 中的“生成脚本...”执行相同的操作)。但是,由于我的“图像”列是二进制的,我不知道如何对其进行编码以放入 INSERT 语句中,因此该语句是可执行的。

【问题讨论】:

  • 不要使用图像数据类型。它已被弃用近 15 年。 docs.microsoft.com/en-us/sql/t-sql/data-types/… 你应该改用 varbinary(max)。
  • 对于手头的问题……不清楚你想要什么。
  • 我这辈子都无法确定为什么有人会认为这个问题值得一票。
  • 这是真的 - 它不是:)。抱歉,感谢您指出我需要重新定义我的问题。希望现在它更容易理解了。

标签: java sql-server mssql-jdbc


【解决方案1】:

您可以使用convert SQL 函数将二进制 (varbinary) 转换为字符串 (varchar),以便将二进制数据转换为字符串(以十六进制表示)。

convert 函数有一个参数样式,表示字符串是否以 0x 字符开头。我在这些示例中使用值 2(没有 0x 字符)。

从二进制到字符串:

select convert(varchar(max), my_image, 2) as my_string_representation
from my_table

从字符串,回到二进制:

select convert(varbinary(max), my_string_representation, 2) as my_binary_image
from my_table

因此,为了构建您的纯文本插入语句,假设 convert(varchar(max), my_image, 2) 在某个特定位置返回了 '49747A696B...' 字符串记录,那么您对该记录的插入语句将是:

insert into my_table (my_id, my_image)
            values (25, convert(varbinary(max), '49747A696B...', 2))

【讨论】:

  • 感谢您的回答。但是,当我尝试使用它时,我遇到了一个问题:不允许从数据类型 image 到 varchar(max) 的显式转换。
  • 是的,正如一些评论所说,图像数据类型已过时,您应该将字段从图像更改为 varbinary(max)。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 2018-03-24
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多