sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo actualizar un campo varbinary con un valor específico?

Prueba esto:

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

(no es necesario convertir una cadena que almacene un valor hexadecimal en varbinary; eso es lo que es de forma predeterminada, sin las comillas)

La pregunta es, ¿cómo está generando ese valor hexadecimal de contraseña y está utilizando la misma codificación para generarla que para leerla? Si planea volver a convertir esos datos en una cadena, necesitará algún código para hacerlo. Aquí hay una función que escribí que hace esto:

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 

Sin embargo, no sé cuán útil será esto para usted, ya que es muy posible que cualquier aplicación que esté usando estos campos esté manejando los valores de manera diferente a lo que espera esta función. Para el registro, esta función toma un valor varbinary que originalmente era una cadena utf-8 y devuelve el valor varchar de esa cadena. ¡Buena suerte!