SQL

[SQLServer] varbinary型の列にINSERTする

varbinary型の列に値をINSERTするサンプルです。
16進数リテラルを直接指定する方法、変数を使う方法、文字列をCONVERTして格納する方法を紹介します。

ここでは、以下のテーブル定義を例とします。

列名
CDint
DATAvarbinary(max)

サンプル

例)16進数リテラルを直接INSERTする

16進数の値は、先頭に「0x」を付けて指定します。

16進数は2桁で1バイトを表します。「0x89504E47」であれば4バイトのデータになります。

例)変数を使ってINSERTする

アプリケーション側からパラメータとしてバイナリデータを渡す場合も、この@data部分にバインドする形になります。

例)文字列をCONVERTしてINSERTする

文字列をそのままの文字コードでバイナリ化したい場合は、CONVERT関数を使用します。

この方法は、文字列を1バイト1文字として変換します。日本語などマルチバイト文字を含む場合は、想定した文字コードで変換されているか確認してください。

例)NULLをINSERTする

備考

  • varbinary(n)は最大8,000バイトまでの可変長バイナリ型です。8,000バイトを超えるデータや、長さが不定のデータを扱う場合はvarbinary(max)(最大2GB)を使用してください。
  • ファイルの中身をまるごとバイナリデータとしてINSERTしたい場合は、OPENROWSET関数を使う方法が便利です。
    [SQLServer] ファイルからバイナリデータをINSERTする
  • 格納したバイナリデータのバイト数を確認したい場合は、DATALENGTH関数が使用できます。
    [SQLServer] 文字列のバイト数を取得する(DATALENGTH)
  • 逆にvarbinary型の値を文字列として取り出したい場合は、CONVERT(VARCHAR(MAX), <varbinary値>)のようにCONVERT関数を使用します。

関連記事


-SQL