我在数据库中有一个varbinary
列。它包含十六进制数据的长数据。
我使用substring
来选择和显示数据。
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
,有什么想法吗?非常感谢。我是新来的。我试图寻找substring
更新,但没有在网上找到任何有效的例子。
感谢。
- - - - - - - - 编辑
我试过了:
UPDATE
CHAR_TDATA0
SET char_data = stuff(cast(char_data as BINARY(2000)), 9, 16, CONVERT(BINARY(16), 'testnamezs'))
WHERE CHAR_KEY=4
但没有运气。得到了一些语法错误。
答案 0 :(得分:0)
我无法理解为什么要以这种方式保存数据,而不是在数据库中为各种数据使用单独的列。
无论如何,我认为你不能以这种方式更新部分数据。我认为你要做的是选择一行的所有数据,更新你想要更改的部分,然后重新插入更新的基于十六进制的数据字符串作为一个整体。
类似的东西:
UPDATE
CHAR_TDATA0
SET char_data = "your already hex-encoded string of data here..."
WHERE CHAR_KEY=4
答案 1 :(得分:0)
首先尝试保存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