投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/6/9 14:12:50
SQL Server 2016 であれば、FILESTREAM  ディレクトリを割り当てて、
FILETABLE として管理してみるのは如何でしょう。
https://codezine.jp/article/detail/6602
https://msdn.microsoft.com/ja-jp/library/ff929144.aspx
https://msdn.microsoft.com/ja-jp/library/gg509088.aspx

CREATE TABLE YourTable AS FILETABLE
  WITH 
  ( 
    FILETABLE_DIRECTORY = 'YourTable', 
    FILETABLE_COLLATE_FILENAME = database_default
  ) 



FILETABLE として管理せず、VARBIANRY 型のフィールドに保持したいのであれば、こういう方法もあります。DB サーバー上のファイルで、かつ、BULK 処理が可能な権限も必要ですが。

INSERT INTO YourTable ( id, fileName, fileContents) 
SELECT
  100 AS id,
  N'C:\ExcelFiles\sample.xlsx' as fileName, 
  yourFile.BulkColumn as fileContents 
FROM 
  OPENROWSET(BULK N'C:\ExcelFiles\sample.xlsx', SINGLE_BLOB) yourFile 



SQL Server 側からアクセスできないようなデータの場合には:

(案1) 16進バイナリリテラルを用いて渡すようにする。
INSERT INTO YourTable ( id, fileName, fileContents) 
VALUES ( 200, N'C:\Samples\demo.bin', 0x549B4C756E30EE4E6297015FEB58 ) 


(案2) VB 側で、System.IO.File.ReadAllBytes で Byte 配列に受け取った後で、
ADO.NET でパラメータクエリにして INSERT する。

http://you-the-r.blogspot.jp/2011/03/db-sqlserver-vbnet.html