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,您能进一步解释一下吗?