varbinary型の列に値をINSERTするサンプルです。
16進数リテラルを直接指定する方法、変数を使う方法、文字列をCONVERTして格納する方法を紹介します。
ここでは、以下のテーブル定義を例とします。
| 列名 | 型 |
|---|---|
| CD | int |
| DATA | varbinary(max) |
サンプル
例)16進数リテラルを直接INSERTする
16進数の値は、先頭に「0x」を付けて指定します。
|
1 2 |
INSERT INTO t_test (cd, data) VALUES (1, 0x89504E470D0A1A0A); |
16進数は2桁で1バイトを表します。「0x89504E47」であれば4バイトのデータになります。
例)変数を使ってINSERTする
|
1 2 3 4 5 |
DECLARE @data VARBINARY(MAX); SET @data = 0x89504E470D0A1A0A; INSERT INTO t_test (cd, data) VALUES (2, @data); |
アプリケーション側からパラメータとしてバイナリデータを渡す場合も、この@data部分にバインドする形になります。
例)文字列をCONVERTしてINSERTする
文字列をそのままの文字コードでバイナリ化したい場合は、CONVERT関数を使用します。
|
1 2 |
INSERT INTO t_test (cd, data) VALUES (3, CONVERT(VARBINARY(MAX), 'sample')); |
この方法は、文字列を1バイト1文字として変換します。日本語などマルチバイト文字を含む場合は、想定した文字コードで変換されているか確認してください。
例)NULLをINSERTする
|
1 2 |
INSERT INTO t_test (cd, data) VALUES (4, NULL); |
備考
- varbinary(n)は最大8,000バイトまでの可変長バイナリ型です。8,000バイトを超えるデータや、長さが不定のデータを扱う場合はvarbinary(max)(最大2GB)を使用してください。
- ファイルの中身をまるごとバイナリデータとしてINSERTしたい場合は、OPENROWSET関数を使う方法が便利です。
⇒ [SQLServer] ファイルからバイナリデータをINSERTする - 格納したバイナリデータのバイト数を確認したい場合は、DATALENGTH関数が使用できます。
⇒ [SQLServer] 文字列のバイト数を取得する(DATALENGTH) - 逆にvarbinary型の値を文字列として取り出したい場合は、CONVERT(VARCHAR(MAX), <varbinary値>)のようにCONVERT関数を使用します。