尝试这个:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B
WHERE LoginID=10947
(您不需要将存储十六进制值的字符串转换为 varbinary - 这就是默认情况下的内容,没有引号)
问题是,您是如何生成该密码十六进制值的,并且您是否使用与读取它相同的编码来生成它?如果您打算将该数据转换回字符串,则需要一些代码来执行此操作。这是我写的一个函数:
CREATE FUNCTION ConvertBinary
(
@value AS varbinary(max)
) RETURNS VARCHAR(MAX) AS BEGIN
DECLARE @result AS varbinary(max),
@result2 AS varchar(max),
@idx AS bigint;
IF @value IS null
return null;
SELECT @result = @value;
SELECT @result2 = '';
SELECT @idx = 1;
WHILE substring(@result, @idx, 1) != 0 AND @idx < len(@result)
BEGIN
SET @result2 = @result2 + cast(substring(@result,@idx,1) as char(1));
SET @idx = @idx + 1;
END
RETURN @result2;
END
不过,我不知道这对您有多大帮助,因为很可能使用这些字段的任何应用程序处理值的方式与此函数预期的不同。为了记录,这个函数接受一个原始 utf-8 字符串的 varbinary 值,并返回该字符串的 varchar 值。祝你好运!