none
OPENROWSET関数のBULKオプション(ファイルパス)に変数を使用したい RRS feed

  • 質問

  • いつもこのフォーラムでお世話になっています。

    SQLServer2012で、画像ファイルをimage型のフィールドへ取り込みたいと考えています。

    OPENROWSET関数を使用すると実現できたのですが、BULKオプションの'data_file'に設定する画像ファイルのパスを動的に変えたいのです。

    変数を使いたいのですが、どうやっても実現できずに悩んでいます。

    ※下記の「C:\hoge\test.png」を変数にしたい

    UPDATE [テーブル]

    SET [フィールド] = (SELECT BulkColumn FROM OPENROWSET(BULK N'C:\hoge\test.png', SINGLE_BLOB) AS [別名])

    WHERE hoge

    どなたかお力をお貸しいただけないでしょうか。

    よろしくお願いします。

    2013年1月17日 2:23

回答

すべての返信

  • 以下に、「OPENROWSET の引数に変数は指定できません。 」と書かれているので、画像ファイルのパスを動的に変えようとした場合は、SQL文を組み立てるしか無さそうです。
    ただし、この方法はSQLインジェクションの可能性が発生することを忘れないでください。

    OPENROWSET (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms190312.aspx

    また、OPENROWSETを使わない他の方法として、以下の方法もあります。

    SQLServerにSQL文でimageデータをINSERT
    http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/d9c89d1e-7fd1-4e52-9bdc-2777f38f7cf5/


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク chibiken6 2013年1月22日 4:18
    • 回答としてマークされていない chibiken6 2013年1月22日 4:19
    • 回答としてマーク chibiken6 2013年1月22日 4:21
    2013年1月22日 1:55
  • アドバイスいただきましてありがとうございます。

    動的SQLではSQLインジェクション対策が必要なようですね。

    イメージファイルをバイナリ化して、ADO.NETでSQLServerへUPDATEする方法が確実だと判断できました。

    ありがとうございました。

    2013年1月22日 4:21