将十六进制字符串值插入sql server图像字段会追加额外的0

rot*_*ine 13 t-sql binary sql-server-2008

有一个图像字段,并希望从十六进制字符串中插入:

insert into imageTable(imageField) 
values(convert(image, 0x3C3F78...))
Run Code Online (Sandbox Code Playgroud)

但是当我运行select时,返回值为0,另外0为0x03C3F78 ...

这个额外的0导致另一个应用程序出现问题,我不想要它.

如何阻止添加额外的0?

架构是:

CREATE TABLE [dbo].[templates](
    [templateId] [int] IDENTITY(1,1) NOT NULL,
    [templateName] [nvarchar](50) NOT NULL,
    [templateBody] [image] NOT NULL,
    [templateType] [int] NULL)
Run Code Online (Sandbox Code Playgroud)

并且查询是:

insert into templates(templateName, templateBody, templateType) 
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2)
Run Code Online (Sandbox Code Playgroud)

实际的十六进制字符串非常大,可以在这里发布.

Pau*_*nis 11

我刚遇到类似的问题,我责备自己.

您可以复制所需的部分数据.就我而言,我在blob的末尾加了'0'.

原因可能是将值从SQL Management Studio复制到剪贴板.


插入到imageTable(imageField)值(0x3C3F78 ... A)

选择返回:0x03C3F78 ...


插入到imageTable(imageField)值(0x3C3F78 ... A 0)

选择返回:0x3C3F78 ...


我希望这将有所帮助.

最好的祝愿.


gbn*_*gbn 1

这对于 0x0 是正确的:每对数字构成一个字节,因此 0x00 存储了该值

当我运行时,SELECT convert(varbinary(max), 0x55)我在 SQL Server 2008 上得到 0x55。SELECT convert(varbinary(max), 85)给我 0x00000055,这是正确的,85 是一个 32 位整数

您要转换为 varbinary 的数据类型是什么?

编辑:我仍然无法使用图像而不是 varbinary 进行复制

但有些问题:

  • 这是升级后的数据库吗?兼容级别是多少?
  • 为什么使用图像:使用 varbinary(max) 代替
  • 当你将所有内容更改为 varbinary 时会发生什么?