更新 varbinary(MAX) 列

Update varbinary(MAX) column

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

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

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

值看起来像:0x504B03041400060008000.......FBB9

我尝试了直接更新查询:

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

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

我该怎么做?

正在添加额外的 0,因为您设置的整个值都是奇数。 SQL 服务器将用额外的 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