以下自分用のメモです。忘れない内にメモメモ・・。
SQLServerにて、binary/varbinary型の列の値を
SQLで更新する必要がある場合、2つの方法があります。
- OPENROWSETを利用する方法
- 直接指定する方法
1.の方法は、一旦ファイルにしてからそれを登録する方法です。
INSERT INTO XXXX(binCol) SELECT * FROM OPENROWSET(BULK N'C:\XXXX.dat', SINGLE_BLOB)
2.のやり方は文字通りSQLの中に直接埋め込みます。
結果は、「16進数にしてぶち込む」という事になります。
以下、サンプルSQLです。
update [XXXX] set [binCol] = 0x866d5e1ef12ad8e06725f2fe where [id] = 1
上記のように、先頭に「0x」を付与して16進数で値を構築します。
.NETで開発している場合は、ADO.NET側でうまくやってくれるので
基本的にbyte[]しか相手にしませんので、気にしなくてOKです。
以下、ついでにサンプル用の16進数を作成したちょんプロ。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { byte[] buf = new byte[100]; new Random().NextBytes(buf); Console.WriteLine("0x{0}", string.Join("", buf.Select(b => Convert.ToString(b, 16)).ToArray())); Console.ReadKey(); } } }
【参照リソース】
- http://bytes.com/topic/sql-server/answers/78700-binary-varbinary-question
- http://weblogs.sqlteam.com/peterl/archive/2007/09/26/Insert-binary-data-like-images-into-SQL-Server-without-front-end.aspx
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ