Sql server 子字符串中的SQL Server更新

Sql server 子字符串中的SQL Server更新,sql-server,Sql Server,我在数据库中有一个varbinary列。包含十六进制格式的长范围数据的 我使用子字符串来选择和显示数据 SELECT TOP 100 CHAR_KEY AS charid, USER_KEY AS userid, CONVERT(VARCHAR,substring(char_data, 9, 16)) AS name, CONVERT(INT,cast(reverse(substring(char_data, 7, 2)) as BINARY(2))) AS le

我在数据库中有一个
varbinary
列。包含十六进制格式的长范围数据的

我使用
子字符串
来选择和显示数据

SELECT TOP 100
    CHAR_KEY AS charid,
    USER_KEY AS userid,
    CONVERT(VARCHAR,substring(char_data, 9, 16)) AS name,
    CONVERT(INT,cast(reverse(substring(char_data, 7, 2)) as BINARY(2))) AS level,
    CONVERT(INT,substring(char_data, 25, 1)) AS type,
    CONVERT(INT, substring(char_data, 261, 1)) AS permission,
    guild_data.guild_name
FROM CHAR_DATA0
    inner join guild_data 
    on guild_key = 
        CONVERT(INT, 
                cast(reverse(substring(char_data, 33, 4)) as BINARY(4)))
WHERE CONVERT(INT, substring(char_data, 261, 1))=0x00 
ORDER BY level DESC
现在我想更新一下,有什么想法吗?谢谢。这方面我是新手。我试图寻找
子字符串
更新,但在网上找不到任何有效的示例

谢谢

-----编辑-----

我试过这个:

UPDATE
CHAR_TDATA0
SET char_data = stuff(cast(char_data as BINARY(2000)), 9, 16, CONVERT(BINARY(16), 'testnamezs'))
WHERE CHAR_KEY=4

但是没有运气。出现一些语法错误。

我很难理解为什么要以这种方式保存数据,而不是在数据库中为不同的数据段使用单独的列

在任何情况下,我不认为你可以用这种方式更新部分数据。我认为您需要做的是为一行选择所有数据,更新您想要更改的部分,然后作为一个整体重新插入更新的十六进制数据字符串

比如:

UPDATE
CHAR_TDATA0
SET char_data = "your already hex-encoded string of data here..."
WHERE CHAR_KEY=4

尝试先将内容保存在SQL Server变量中,然后进行计算和更新。
希望这有帮助

DECLARE @lc_char_data as varchar(max)
SET @lc_char_data = stuff(cast(char_data as BINARY(2000)), 9, 16, CONVERT(BINARY(16), 'testnamezs'))
UPDATE
CHAR_TDATA0
SET char_data = @lc_char_data
WHERE CHAR_KEY=4

是的,你在第二阶段的想法是我最初的计划。我想知道还有没有别的办法。谢谢你。