2016-08-29 27 views
1

varbinary(MAX)列を更新しようとしていますが、実際にユーザーがWebサイトからアップロードしたWordファイルの保存データが格納されています。varbinary(MAX)列の更新

ユーザーが間違ったファイルをアップロードしたため、正しいファイルを反映するように列を更新する必要がありました。私が何をしたか

は、それがデータベースに保存されたと私は見て「varbinary型(MAX)値」をコピーして置き換えるためにそれを使用することができるように試験機に、私は正しいファイルをアップロードしたことだった間違ったもの

値のようになります。それは、1行(s)が影響を受けたと言いますが、そのファイルができない

UPDATE my_table Set datafile = 0x504B03041400060008000........FBB9 

:0x504B03041400060008000 ........ FBB9

は、私はまっすぐ進むUPDATEクエリを試してみましたフォントの終わりのWebからダウンロードした後に開いておくと、保存された値は0x0504B03041400060008000........FBB(より余分に1 0Xと終わりにが消えた後)

どのように私はこれを行うのですか?

答えて

1

設定している値全体が奇数であるため、余分な0が追加されています。 SQL Serverはそれを余分な0で埋めて、それを均一にします。

declare @varmax varbinary(max) 
set @varmax = 0x1234567   --odd 
select @varmax     --returns 0xwith the padded 0 

set @varmax = 0x12345678  --even 
select @varmax     --returns 0x12345678 

あなたが最大値を満たす奇数バイトを入力しているので、あなたの9がドロップされています。したがって、0が挿入されますが、これは最大バイト数をオーバーフローし、したがって切り捨てられます。私はあなたのエラーを複製することができました...しかし、それを回避する方法はまだ分かりません。

ここはあなたのテストに使用した値です。結果を無視しますが、自分のSSMSにコピーして正しい出力を確認することができます。

http://rextester.com/LMGQ8686

+0

私は自分の価値を持つ上に、あなたのクエリを使用したのと同じ問題。ここでも同じ問題がありますが、私は解決策を理解していません。あなたが助けることができますhttp://stackoverflow.com/questions/29913283 –

+0

あなたの値を貼り付けることができますか?そうでない場合は、ANSI_PADDING OFFを設定したときにも発生します。 – scsimon

+0

@RonaldinhoLearnCodingが編集を追加しました。それを防ぐ方法は分かっていないが、WHY – scsimon

関連する問題