gpt4 book ai didi

SQL Server 插入变量

转载 作者:行者123 更新时间:2023-12-02 06:54:05 25 4
gpt4 key购买 nike

我需要带一个 Varbinary(max)从 SQL Server 列并将其插入另一个 varbinary列,但是我的图像在通过新字段显示时没有呈现,我做错了什么?

我从 SQL Server 复制过来的,即

E7D28201A240202178EF491E413EB4DDBCFB54A15077A989A37A0C5E4E0F143AEE7000CE3F3A70C0E4F342E524C8F4A7243888AA581EC051B030E7A8EF4E233DF.....

进而
update client
set Photo = convert(varbinary(max),'E7D28201A240202178EF491E413EB4DDBCFB54A15077A989A37A0C5E4E0F143AEE7000CE3F3A70C0E4F342E524C8F4A7243888AA581EC051B030E7A8EF4E233DF.....')
where id='40946b09-81be-42b0-ae62-63182acb1e89'

最佳答案

数据不是Base64 encoded因为这将具有更大范围的字母字符,而该值是纯十六进制值(即 0-9、A-F)。此外,由 O.P. 提供的示例 HTML 代码(在对问题的评论中)是:

<img src="data:image;base64,@System.Convert.ToBase64String(Model.PhotoDisplay) 

这表明 Model.PhotoDisplay 的源值首先转换为 Base64 以便 data:image;base64类型指定将是正确的。

问题是 SQL Server 在被要求转换值时,并不知道它已经是一个十六进制/二进制字符串。您需要告诉 SQL Server 源数据的格式是什么。这可以通过两种方式完成:
  • 根据您构建此值的方式,您只需添加 0x前缀并删除单引号:

    UPDATE cl
    SET cl.Photo = CONVERT(VARBINARY(MAX), 0xE7D28201A24020.....)
    FROM Client cl
    WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
  • 如果您需要将值保留为字符串,并且使用 SQL Server 2008 或更新版本,那么您可以使用 CONVERT 的“样式”选项。函数告诉 SQL Server 它是一个二进制值,你有额外的选项
  • 添加 0x前缀并使用 1 的“样式” :

    UPDATE cl
    SET cl.Photo = CONVERT(VARBINARY(MAX), '0xE7D28201A24020.....', 1)
    FROM Client cl
    WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
  • 保留没有 0x 的值前缀并使用 2 的“样式” :

    UPDATE cl
    SET cl.Photo = CONVERT(VARBINARY(MAX), 'E7D28201A24020.....', 2)
    FROM Client cl
    WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';

  • 但是,如果这些数据真的来自 VARBINARY(MAX)另一个表中的字段,那么它是如何以字符串结尾的呢?移动它的最简单方法是:
  • 直接在表之间传输数据:

    UPDATE cl
    SET cl.Photo = src.SomeField
    FROM Client cl
    INNER JOIN SomeTable src
    ON src.JoinField = cl.JoinField
    WHERE something? = somethingElse?;
  • 使用 VARBINARY(MAX)多变的:

    DECLARE @Photo VARBINARY(MAX);

    SELECT @Photo = src.photo
    FROM SomeTable src
    WHERE src.SomeField = ?;

    UPDATE cl
    SET cl.Photo = @Photo
    FROM Client cl
    WHERE cl.[id] = '40946b09-81be-42b0-ae62-63182acb1e89';
  • 关于SQL Server 插入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411679/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com