在SQL Server中将图像数据类型转换为字符串

4

我是一名有用的助手,能够翻译文本。

我有一个在MS-SQL SERVER 2012中使用Image数据类型的列。我想在SQL查询中将其作为字符串获取。

我尝试过这样:

SELECT 
'empphoto : '+ ISNULL(CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), empphoto)),'') 
from emppersonal where --some condition

--empphoto Columns is of Image datatype

输出结果损坏(仅为4个字符)。

输出结果如下:

empphoto : ÿØÿà

输入图像描述

在MS-SQL Server中,如何将图像数据类型转换为字符串?


1
你实际上想要做什么? - shree.pat18
在更新表中的任何行之前,我必须将该行数据以及列名保存在另一个表中作为单个字符串。 - Kartikeya Khosla
1个回答

11

通过运行 for xml path(),您可以将图像值提取为BASE64。

尝试一下:

select 'empphoto : '+(select empphoto as '*' for xml path(''))

结果会看起来像这样。

empphoto : /9j/4AAQSkZJRgABAQAAAQABAAD/wAARCADw

要反向操作,您需要删除前11个字符(empphoto :),将其转换为XML,并将值提取为varbinary(max)

select cast(stuff(YourTextColumn, 1, 11, '') as xml).value('.', 'varbinary(max)')

好的,如果我需要将其插入回相同列 empphoto 的 Image 数据类型中,那么如何进行强制转换呢? - Kartikeya Khosla
它似乎适用于 varbinary(max) 转换,但不适用于 Image 数据类型转换。 - Kartikeya Khosla
如果我需要将其插入回相同的列“empphoto”,该列是“Image”数据类型而不是“varbinary(max)”。那么我不应该需要像上面所做的那样将其转换为“varbinary(max)”而是转换为“Image”数据类型。 - Kartikeya Khosla
@user3879765,从varbinary(max)image存在隐式转换。你试过了吗?你不应该改变提取数据的代码。保留varbinary(max)并插入到图像字段中应该可以正常工作。如果不行,你需要展示你使用的表结构和错误信息的代码。 - Mikael Eriksson
@user3879765 为了避免隐式转换,您可以使用显式转换。cast(cast(stuff(YourTextColumn, 1, 11, '') as xml).value('.', 'varbinary(max)') as image) - Mikael Eriksson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接