いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

SQLServerのbinary/varbinary型の値をSQLで設定する方法 (binary, varbinary, byte[], OPENROWSET, 16進数)


以下自分用のメモです。忘れない内にメモメモ・・。


SQLServerにて、binary/varbinary型の列の値を
SQLで更新する必要がある場合、2つの方法があります。

  1. OPENROWSETを利用する方法
  2. 直接指定する方法


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();
        }
    }
}


【参照リソース】

================================
過去の記事については、以下のページからご参照下さい。