有一个图像字段,并希望从十六进制字符串中插入:
insert into imageTable(imageField)
values(convert(image, 0x3C3F78...))
然而,当我运行select时,返回值为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)
,查询是:
insert into templates(templateName, templateBody, templateType)
values('I love stackoverflow', convert(image, 0x3C3F786D6C2076657273696F6E3D.......), 2)
实际的十六进制字符串非常大,可以在这里发布。
答案 0 :(得分:11)
我刚遇到类似的问题,我责备自己。
您可以复制所需的部分数据。就我而言,我在blob的末尾添加了'0'。
原因可能是将值从SQL Management Studio复制到剪贴板。
插入imageTable(imageField)值(0x3C3F78 ... A)
选择返回:0x03C3F78 ...
插入imageTable(imageField)值(0x3C3F78 ... A 0 )
选择返回:0x3C3F78 ...
我希望这会有所帮助。
祝福。
答案 1 :(得分:1)
这对于0x0是正确的:每对数字产生一个字节,因此0x00具有存储的值
当我运行SELECT convert(varbinary(max), 0x55)
时,我在SQL Server 2008上得到0x55。SELECT convert(varbinary(max), 85)
给我0x00000055,这是正确的,85是32位整数
您要向varbinary投射什么数据类型?
编辑:我仍然无法使用图像而不是varbinary
重现但有些问题: