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

Hvordan opdaterer man et varbinært felt med en bestemt værdi?

Prøv dette:

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

(du behøver ikke at caste en streng, der gemmer en hex-værdi i varbinary - det er bare, hvad det er som standard, uden anførselstegn)

Spørgsmålet er, hvordan genererer du den hex-kodeværdi, og bruger du den samme kodning til at generere den, som du skal læse den? Hvis du planlægger at konvertere disse data tilbage til en streng, skal du bruge noget kode for at gøre det. Her er en funktion, jeg skrev, der gør dette:

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 

Jeg ved dog ikke, hvor nyttigt dette vil være for dig, da det er meget muligt, at enhver app, der bruger disse felter, håndterer værdierne anderledes, end denne funktion forventer. For en ordens skyld tager denne funktion en varbinær værdi, som oprindeligt var en utf-8-streng, og returnerer varchar-værdien for den streng. Held og lykke!



  1. ClassNotFoundException:oracle.jdbc.OracleDriver

  2. Indsæt data i MySQL-tabel fra Python-script

  3. Hvordan får man databaseoprettelsestid i PostgreSQL 9.0?

  4. Entity Framework kan ikke opdatere data i tabel med sammensat nøgle (Oracle)