sql >> データベース >  >> RDS >> Sqlserver

varbinaryフィールドを特定の値で更新するにはどうすればよいですか?

    これを試してください:

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

    (16進値を格納する文字列をvarbinaryにキャストする必要はありません。これは、デフォルトでは引用符なしでそのままです)

    問題は、そのパスワードの16進値をどのように生成し、それを読み取るのと同じエンコーディングを使用して生成するかということです。そのデータを文字列に戻すことを計画している場合は、そのためのコードが必要になります。これを行う私が書いた関数は次のとおりです:

    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 
    

    ただし、これらのフィールドを使用しているアプリが、この関数が期待するものとは異なる方法で値を処理している可能性が非常に高いため、これがどの程度役立つかはわかりません。レコードの場合、この関数は元々utf-8文字列であったvarbinary値を取り、その文字列のvarchar値を返します。頑張ってください!



    1. ClusterControlを使用してハイブリッドクラウドMySQLデータベースをデプロイする

    2. オラクルのインデックスの種類?

    3. MySQLは、あるテーブルから別のテーブルにすべてのレコードを効率的にコピーします

    4. データベースクエリで行をフェッチするときにLIMIT句を使用せずに、PHPを使用して結果を制限しますか?