sql >> Database >  >> RDS >> Sqlserver

Hoe een varbinary-veld bijwerken met een specifieke waarde?

Probeer dit:

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

(je hoeft geen string te casten die een hexadecimale waarde opslaat in varbinary - dat is precies wat het standaard is, zonder de aanhalingstekens)

De vraag is, hoe genereer je die wachtwoord hex-waarde, en gebruik je dezelfde codering om het te genereren als om het te lezen? Als je van plan bent om die gegevens weer om te zetten in een string, heb je wat code nodig om dit te doen. Hier is een functie die ik heb geschreven en die dit doet:

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 

Ik weet echter niet hoe nuttig dit voor u zal zijn, aangezien het heel goed mogelijk is dat welke app dan ook die deze velden gebruikt, de waarden anders verwerkt dan deze functie verwacht. Voor de goede orde, deze functie neemt een varbinary-waarde die oorspronkelijk utf-8-tekenreeks was, en retourneert de varchar-waarde van die tekenreeks. Veel succes!



  1. SQL Server ROUND()-functie:waar is het voor en waarom zou het u iets kunnen schelen?

  2. Hoe PostgreSQL op DigitalOcean te implementeren

  3. Transactielogboeken bekijken in SQL Server 2008

  4. Hex-waarden invoegen in MySql