更新 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 中并查看正确的输出。
我正在尝试更新 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 中并查看正确的输出。