Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment mettre à jour un champ varbinary avec une valeur spécifique ?

Essayez ceci :

UPDATE dbo.Login
SET
  Salt=CAST('bPftidzyAQik' AS VARBINARY),
  Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B
WHERE LoginID=10947

(vous n'avez pas besoin de convertir une chaîne stockant une valeur hexadécimale en varbinary - c'est juste ce que c'est par défaut, sans les guillemets)

La question est de savoir comment générez-vous cette valeur hexadécimale de mot de passe et utilisez-vous le même encodage pour le générer que pour le lire? Si vous envisagez de reconvertir ces données en une chaîne, vous aurez besoin de code pour le faire. Voici une fonction que j'ai écrite et qui fait cela :

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 

Je ne sais pas à quel point cela vous sera utile, car il est très possible que l'application qui utilise ces champs gère les valeurs différemment de ce à quoi cette fonction s'attend. Pour mémoire, cette fonction prend une valeur varbinary qui était à l'origine une chaîne utf-8 et renvoie la valeur varchar de cette chaîne. Bonne chance !