我有一张像这样的表my_table
CREATE TABLE my_table
([row_id] [int] IDENTITY(1,1) NOT NULL,
[description] [varchar](50) NOT NULL,
[img1] [image] NOT NULL)
我想将description
和img1
检索为给定row_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
。如何在我的选择查询中使用此代码,并将@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。
答案 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