在SQL Server中从base64字符串转换为varbinary(max)

时间:2014-09-17 17:49:37

标签: sql sql-server pdf base64 varbinary

我将PDF文档存储在我的表中作为二进制文件,存储PDF的字节的列是varbinary(max)类型。我想update在SQL Studio中使用更新文档的一条记录,我试图完成此操作的方式如下所示

UPDATE table
SET file_bytes=CONVERT(varbinary(max),'JVBERi0xLjYNCiW2JqDQo8PC9UeX...0YNCg==') --this is a base64 string
WHERE id='73c75254-ad86-466e-a881-969e2c6e7a04';

查询运行,但是当我尝试下载文档(通过网站)时,它会抛出一条显示PDF header signature not found.

的错误消息

这种转换是否可能?

1 个答案:

答案 0 :(得分:0)

可以使用这里描述的方法:https://blogs.msdn.microsoft.com/sqltips/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa/

这是一个两步过程,首先声明一个变量:

declare @str varchar(max) = '/9j/4AAQSkZJRgABAQEAAAAAAAD/==';

然后,您可以在SQL语句中使用变量,如下所示:

INSERT INTO Documents (Name, Body, MIMEType)
VALUES('12446_photo.jpg', cast(N'' as xml).value('xs:base64Binary(sql:variable("@str"))', 'varbinary(max)'), 'image/jpeg');