Sql server 在选择查询中将图像转换为Base64String
我有一张这样的桌子Sql server 在选择查询中将图像转换为Base64String,sql-server,image,base64,Sql Server,Image,Base64,我有一张这样的桌子 CREATE TABLE my_table ([row_id] [int] IDENTITY(1,1) NOT NULL, [description] [varchar](50) NOT NULL, [img1] [image] NOT NULL) 我想将description和img1检索为给定行id CREATE PROCEDURE @row_id int AS SELECT description,
CREATE TABLE my_table
([row_id] [int] IDENTITY(1,1) NOT NULL,
[description] [varchar](50) NOT NULL,
[img1] [image] NOT NULL)
我想将description
和img1
检索为给定行id
CREATE PROCEDURE
@row_id int
AS
SELECT
description,
img1 -- Need to change this line
FROM
my_table
WHERE
row_id = @row_id
在网上搜索我找到的
SELECT CAST('' AS XML).value('xs:base64Binary(sql:variable("@bin"))','VARCHAR(MAX)')
它使用一个变量@bin
。如何在select查询中使用此代码并将@bin
替换为img1
更新
这就是我现在要做的
DECLARE @img1 varbinary(max)
SELECT @img1 = img1 FROM my_table WHERE row_id = @row_id
SELECT
description,
CAST('' AS XML).value('xs:base64Binary(sql:variable("@img1"))','VARCHAR(MAX)') AS img1
FROM
my_table
WHERE
row_id = @row_id
这是可行的,但需要两个部分,我将查询同一个表两次。正如您可能想象的,这是一个示例,但我有多个列需要转换为base64。您可以使用JSON函数实现base64转换,前提是您的SQL Server版本和数据库兼容级别足够新,可以支持它:
select * from openjson((
select description, img1
from my_table
where row_id = @row_id
for json auto
)) with(description varchar(50), img1 varchar(max))
这个可能好一点
select
description,
base64_img1 = CAST('' AS XML).value('xs:base64Binary(sql:column("img1"))','VARCHAR(MAX)')
from (
select
description,
img1 = cast(img1 as varbinary(max))
from my_table
) T
SELECT CAST(“”)AS XML.value('xs:base64Binary(sql:column(“img1”),'VARCHAR(MAX)
?@gotqn谢谢,但我得到了XQuery[value()]:sql:column()和sql:variable()不支持sql类型“image”。
您真的需要在服务器上这样做吗?是否真的没有任何东西能够使用此结果集执行此转换?(如果您在服务器中确实需要它,CLR函数可能会工作得最好,您只需调用Convert.ToBase64String(…)
)@Damien\u,我确实需要它服务器端。由于某些原因,客户端无法处理字节[]
。以前从未使用过CLR,您能进一步解释一下吗?