我正在尝试更新varbinary(MAX)列,它实际上存储了用户从网站上传的Word文件的已保存数据。
用户上传的文件错误,因此我需要更新列以反映正确的文件。
我所做的是在测试机中我上传了正确的文件,因此它被保存到数据库中,我可以看到并复制" varbinary(MAX)值"并用它来取代错误的
值如下:0x504B03041400060008000 ........ FBB9
我尝试了直接的UPDATE查询:
UPDATE my_table Set datafile = 0x504B03041400060008000........FBB9
它说有1行受影响,但是从font-end网站下载后该文件无法打开,我注意到保存的值为0x0504B03041400060008000........FBB
(另外1行 0 在0x之后, 9 在最后消失了)
我该怎么做?
答案 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中并查看正确的输出。