如何在 SQL 服务器中设置 varbinary 列

How to set varbinary column in SQL server

我正在尝试按照 SQL:

更新 VARBINARY(MAX) 类型的列
UPDATE dbo.__MigrationHistory 
SET Model = 0x1F8B080000000000046
WHERE MigrationId = '201510051415248_Test2'

我希望该列设置为 0x1F8B080000000000046 但它设置为 0x01F8B080000000000046

如何将模型设置为所需值:0x1F8B080000000000046?

谢谢

更新 1.

0x1F8B080000000000046 只是我设法复制问题的随机值。我没有输入原始值,因为它由 43679 个符号组成。 MOST 令人困惑的是相同的值已经在数据库中,我正在从另一行复制该值并将其粘贴到我的更新查询中,但是如果从 [=35 更新它,它将起作用=] 例如:

UPDATE dbo.__MigrationHistory
SET Model = (
        SELECT Model
        FROM dbo.__MigrationHistory
        WHERE MigrationId = '201510041415248_Test1'
        ) -- is equal to 0x1F8B080000000000046
WHERE MigrationId = '201510051415248_Test2'

但显然我不能在最初没有该值的数据库上使用该方法。

varbinary0x 开头显示的值是十六进制格式。

在十六进制格式中,值必须由偶数位组成。

SQL 服务器试图将值设置为 0x1F8B080000000000046,但是由于它的位数为奇数,SQL 服务器将额外的 0 添加到开始使该值成为有效的十六进制值。

在不了解您的数据的情况下,我想您可能打算将其设置为:0x1F8B0800000000000046

您是否试图将 46 附加到 0x1F8B08?如果是这样,您必须确保添加正确数量的零以得到偶数位数。

varbinary 未显示为奇数位。该值包含特定数量的字节,每个字节显示为两位数字。

(你可以写一个奇数位数的二进制字面量,例如0x123,但它的意思和0x0123是一样的。)

当您复制一个有 43679 位数字的值时,它不是来自数据库的正确值。很可能是因为它被连接起来,无论是在显示时还是在复制时。