• 締切済み

OPENROWSET関数を使用したインサート方法

現在「vs.net2010 C#」を使用してプログラムを作成しております。 連携するデータベースに「SQL server2010 R2」を使用し、以下の構成のエーブルへデータをインサートしたいと思っているのですが、2点どうしても解決出来ない問題が発生してしまいどうにも原因が分からない状態です。 初心者の為、初歩的な事があまり分かっておらず、大変恐縮ですが、対応方法をご存じの方がいらっしゃいましたら、ご教授頂ければと思います。 ■テーブル構成 テーブル名:test ・ID UNIQUEIDENTIFIER PRIMARY KEY ・FILE_NAME1 VARCHAR(20) ・FILE_DATA1 VABINARY(MAX) ・FILE_NAME1 VARCHAR(20) ・FILE_DATA1 VABINARY(MAX) ■発生している問題 (1)webアプリの画面からファイルを参照し、そのファイルパスを取得し、インサートの際に利用しているのですが、パスの間にスペースが入っている為か下記のようなエラーが発生してしまいます。 ・実行SQL insert into test (ID ,FILE_NAME1 ,FILE_DATA1 ,FILE_NAME1 ,FILE_DATA1) select NEWID() ,null ,null ,'Book1.xls' ,x.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book1.xls', SINGLE_BLOB)AS x 「ファイル"ファイルパス"を開けなかったので、一括読み込みできません。オペレーティングシステムエラーコード 5(アクセスが拒否されました)」 C:直下等にファイルを移し実行すると正常にインサート出来るので、パスのスペースが原因だと考えているのですが、解決策を調べてもよくわかりませんでした・・・ (2)インサートの際に「VABINARY」列が複数ある時の記述方法について 1 insert into test 2 (ID 3 ,FILE_NAME1 4 ,FILE_DATA1 5 ,FILE_NAME1 6 ,FILE_DATA1) 7 select 8 NEWID() 9 'Book1.xls' 10 ,x.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book1.xls', SINGLE_BLOB)AS x 11 ,'Book2.xls' ,12 y.* from OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book2.xls', SINGLE_BLOB)AS y 上記のように「VABINARY」列が複数ある時に、上の9.10行目は問題ないようなのですが、以下の11.12行目が構文エラーとなってしまいす。 本当は12行目以降にも、新しく列を作成し、インサートしたいと思っておりますが、10行目以降は 初歩的な記述方法の問題かとは思うのですが、自身の理解不足も相まって調べても解決できない状態です。 どなたかお力をお貸し頂けませんでしょうか? 以上、宜しくお願い致します。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

1.パスのスペースが問題ではなく、指定先が特定ユーザしかアクセスできないフォルダ(デスクトップなど)であることが問題だと考えられます。  OPENROWSETを実行するユーザは、今それをログインしているユーザ(=デスクトップのユーザ)ではなく、SQL Serverのサービスを動かしているユーザであるため、単純にアクセス権限がないのだと思います。 2.書式は以下の通りとなります。 SELECT NEWID() ,'Book1.xls' ,(SELECT x.* FROM OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book2.xls', SINGLE_BLOB)AS x) ,'Book2.xls' ,(SELECT y.* FROM OPENROWSET(BULK N'C:\Documents and Settings\USER\デスクトップ\Book2.xls', SINGLE_BLOB)AS y) ただ、このように1行に2つvarbinaryのデータを持たせるテーブルデザイン自体がよいとは言えません。 蛇足になるかもしれませんが・・。 本件はWebアプリといいつつ、そのアプリとSQL ServerがインストールされているPC自体でオペレーションしているだけのようです。 他のPCからこのWebアプリを使用したときは、SQL Serverの入っているPCにファイルを送らないとOPENROWSETはできませんので、ご注意ください。