【问题标题】:Update varbinary(MAX) column更新 varbinary(MAX) 列
【发布时间】:2016-08-29 18:12:37
【问题描述】:

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

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

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

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

我尝试了一个直接的 UPDATE 查询:

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

它说有 1 行受到影响,但是从字体端网站下载后该文件无法打开,我注意到保存的值是 0x0504B03041400060008000........FBB(还有 1 个额外 0 0x 之后,最后的 9 消失了)

我该怎么做?

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 当我将您的查询与我的值一起使用时,同样的问题。这是同样的问题,但我不明白解决方案,你能帮忙stackoverflow.com/questions/29913283
    • 你能粘贴你的值吗?如果没有,当您设置 ANSI_PADDING OFF 时也会发生这种情况
    • @RonaldinhoLearnCoding 添加了编辑。还没有想出如何预防它,但想通了为什么
    猜你喜欢
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2010-10-13
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多