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

最後の 4 ビットが失われた SQLServer 2012 の varbinary(MAX) フィールドを更新する

    バイナリ定数 0xFFD8F...6DC0676 のようです 更新に使用した には、奇数の 16 進数が含まれています。また、SqlServer はパターンの先頭に半バイトを追加して、整数のバイト数を表します。

    次の単純なクエリを実行すると、同じ効果が得られます:

    select 0x1, 0x104
    

    これは 0x01 を返します および 0x0104 .

    切り捨ては、SSMS のいくつかの制限が原因である可能性があります。これは、次の実験で確認できます:

    declare @b varbinary(max)
    set @b = 0x123456789ABCDEF0
    set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
    select datalength(@b) DataLength, @b Data
    

    返される結果は 65536 です および 0x123456789ABCDEF0...EF0123456789ABCD 、ただし、SSMS でデータ列をコピーすると、43677 文字の長さのパターンが得られます (これは先頭の 0x なしです)。これは実質的に 21838.5 バイトです。そのため、SSMS でコピー/貼り付けを介して取得した長いバイナリ データ値に依存するべきではないようです (そうする場合)。

    信頼できる代替手段は、中間変数を使用することです:

    declare @data varbinary(max)
    select @data = DataXXX from Table_XXX where ID = XXX
    update Table_YYY set DataYYY = @data where ID = YYY
    



    1. PythonまたはIronpythonでmssqlにアクセスする最も簡単な方法は何ですか?

    2. ResultSetを閉じますが、PreparedStatementを閉じません

    3. MySQLのあるテーブルから別のテーブルにデータを挿入する

    4. Oracle Entity Framework-カスタム関数の呼び出し(EDIT_DISTANCE)