更新varbinary(MAX)列

时间:2016-08-29 18:12:38

标签: c# sql sql-server-2012 hex varbinary

我正在尝试更新varbinary(MAX)列,它实际上存储了用户从网站上传的Word文件的已保存数据。

用户上传的文件错误,因此我需要更新列以反映正确的文件。

我所做的是在测试机中我上传了正确的文件,因此它被保存到数据库中,我可以看到并复制" varbinary(MAX)值"并用它来取代错误的

值如下:0x504B03041400060008000 ........ FBB9

我尝试了直接的UPDATE查询:

UPDATE my_table Set datafile =  0x504B03041400060008000........FBB9

它说有1行受影响,但是从font-end网站下载后该文件无法打开,我注意到保存的值为0x0504B03041400060008000........FBB(另外1行 0 在0x之后, 9 在最后消失了)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

正在添加额外的0,因为您将其设置为的整个值是奇数。 SQL Server将使用额外的0填充它以使其均匀。

declare @varmax varbinary(max) 
set @varmax = 0x1234567         --odd
select @varmax                  --returns 0x01234567 with the padded 0

set @varmax = 0x12345678        --even
select @varmax                  --returns 0x12345678

您的9被删除是因为您输入了填充最大值的奇数个字节。因此,插入一个0,但这会溢出最大字节数,因此也会被截断。我能够复制你的错误......但是还不知道如何绕过它。

这是我用于测试的值。忽略结果......但您可以将它们复制到您自己的SSMS中并查看正确的输出。

http://rextester.com/LMGQ8686