Попробуйте это:
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
Однако я не знаю, насколько это будет полезно для вас, поскольку вполне возможно, что любое приложение, использующее эти поля, обрабатывает значения иначе, чем ожидает эта функция. Для записи, эта функция принимает значение varbinary, которое изначально было строкой utf-8, и возвращает значение varchar этой строки. Удачи!