sql >> Databáze >  >> RDS >> Sqlserver

Jak aktualizovat varbinární pole s konkrétní hodnotou?

Zkuste toto:

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

(nemusíte přetypovat řetězec ukládající hexadecimální hodnotu do varbinary – to je právě to, co je ve výchozím nastavení, bez uvozovek)

Otázkou je, jak generujete tuto hexadecimální hodnotu hesla a používáte k jejímu generování stejné kódování, jako ke čtení? Pokud plánujete převést tato data zpět na řetězec, budete k tomu potřebovat nějaký kód. Zde je funkce, kterou jsem napsal a která dělá toto:

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 

Nevím, jak moc to pro vás bude užitečné, protože je velmi možné, že jakákoli aplikace, která tato pole používá, zachází s hodnotami jinak, než tato funkce očekává. Pro záznam, tato funkce přebírá hodnotu varbinary, která byla původně řetězec utf-8, a vrací hodnotu varchar tohoto řetězce. Hodně štěstí!



  1. Více Kde In

  2. Zřetězení pole souvisejícího s více řádky záznamu v sadě dotazu v Django

  3. Jak resetovat kořenové heslo MySQL nebo MariaDB v Linuxu

  4. 3 způsoby, jak vrátit seznam úloh SQL Server Agent (T-SQL)