Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie aktualisiere ich ein varbinary-Feld mit einem bestimmten Wert?

Versuchen Sie Folgendes:

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

(Sie müssen einen String, der einen Hex-Wert speichert, nicht in varbinary umwandeln - das ist es standardmäßig, ohne die Anführungszeichen)

Die Frage ist, wie generieren Sie diesen Passwort-Hex-Wert, und verwenden Sie dieselbe Codierung, um ihn zu generieren, wie Sie ihn lesen sollen? Wenn Sie vorhaben, diese Daten wieder in einen String umzuwandeln, benötigen Sie dafür etwas Code. Hier ist eine Funktion, die ich geschrieben habe, die dies tut:

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 

Ich weiß jedoch nicht, wie hilfreich dies für Sie sein wird, da es sehr wahrscheinlich ist, dass jede App, die diese Felder verwendet, die Werte anders behandelt, als diese Funktion erwartet. Für den Datensatz nimmt diese Funktion einen varbinary-Wert, der ursprünglich eine utf-8-Zeichenfolge war, und gibt den varchar-Wert dieser Zeichenfolge zurück. Viel Glück!