Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come aggiornare un campo varbinary con un valore specifico?

Prova questo:

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

(non è necessario eseguire il cast di una stringa che memorizza un valore esadecimale in varbinary - è proprio quello che è per impostazione predefinita, senza virgolette)

La domanda è:come stai generando quel valore esadecimale della password e stai usando la stessa codifica per generarlo mentre lo leggi? Se hai intenzione di riconvertire quei dati in una stringa, avrai bisogno del codice per farlo. Ecco una funzione che ho scritto che fa questo:

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 

Tuttavia, non so quanto sarà utile per te, poiché è molto probabile che qualsiasi app stia utilizzando questi campi gestisca i valori in modo diverso da quanto questa funzione si aspetta. Per la cronaca, questa funzione prende un valore varbinary che originariamente era una stringa utf-8 e restituisce il valore varchar di quella stringa. Buona fortuna!