在SELECT查询中将Image转换为Base64String

时间:2016-07-12 09:16:59

标签: sql-server image base64

我有一张像这样的表my_table

CREATE TABLE my_table
    ([row_id] [int] IDENTITY(1,1) NOT NULL,
    [description] [varchar](50) NOT NULL,
    [img1] [image] NOT NULL)

我想将descriptionimg1检索为给定row_id

的Base64String
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。如何在我的选择查询中使用此代码,并将@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。

2 个答案:

答案 0 :(得分:0)

假设您的SQL Server版本和数据库兼容级别足够支持它,您可以使用JSON函数来实现base64转换:

select * from openjson((
    select description, img1
    from my_table
    where row_id = @row_id
    for json auto
)) with(description varchar(50), img1 varchar(max))

答案 1 :(得分:0)

这可能会好一点。

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
相关问题