有一个图像字段,并希望从十六进制字符串插入:
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”添加到blob的末尾。
原因可能是将值从SQL Management Studio复制到剪贴板。
插入到imageTable(imageField)值(0x3C3F78 ... A)
选择返回:0x03C3F78 ...
插入到imageTable(imageField)值(0x3C3F78 ... A 0 )
选择返回:0x3C3F78 ...
我希望这将有所帮助。
最好的祝愿。
我刚遇到类似的问题,我责备自己。
您可以复制所需的部分数据。就我而言,我 将“0”添加到blob的末尾。
原因可能是将值从SQL Management Studio复制到剪贴板。
插入到imageTable(imageField)值(0x3C3F78 ... A)
选择返回:0x03C3F78 ...
插入到imageTable(imageField)值(0x3C3F78 ... A 0 )
选择返回:0x3C3F78 ...
我希望这将有所帮助。
最好的祝愿。
这对于0x0是正确的:每对数字产生一个字节,因此0x00具有存储的值
当我跑 SELECT convert(varbinary(max), 0x55)
我在SQL Server 2008上得到0x55。 SELECT convert(varbinary(max), 85)
给我0x00000055这是正确的是85是32位整数
您要向varbinary投射什么数据类型?
编辑:我仍然无法使用图像而不是varbinary重现
但有些问题:
- 这是一个升级的数据库吗?什么是兼容级别?
- 为什么使用image:使用varbinary(max)代替
- 将所有内容更改为varbinary时会发生什么?