トップ回答者
Bulk Insert で、CSVファイルがアクセス拒否で読み込まれません。

質問
-
お世話になります。
Bulk Insert を行なうストアドを、SQL Server2012 に作成し、バッチファイルからSqlcmdで呼び出すと、
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」エラーになります。
またストアド側のエラーは以下です。
「ファイル "(CSVファイル名)" を開けなかったので、一括読み込みできません。
オペレーティング システム エラー コード 5(アクセスが拒否されました。)。」Bulk Insert するストアドは以下です。
ALTER procedure [dbo].[SP_hogehoge] (
@strCSVFileName varchar(max) ,
@strTableName varchar(max)
)
AS
declare @strSQL varchar(max)
declare @strColumnName varchar(max)
/*
** 半角カンマをデリミッタとして、CSVデータをテーブルに読み込む。
*/
set @strSQL = 'bulk insert [dbo].[' + @strTableName + ']' +
'from ''' + @strCSVFileName + ''' ' +
'with (' +
' FIRSTROW = 2 ' +
',FIRE_TRIGGERS ' +
',FIELDTERMINATOR='','' ' +
',ROWTERMINATOR=''\n'' ' +
')'
execute(@strSQL)
また、バッチファイル(WinServer2012)からは以下の手順でストアドを呼び出しています。
Sqlcmd -U (ログイン名) -P (パスワード) -S (サーバ名) -d (データベース名) -Q "execute dbo.SP_hogehoge '(CSVファイル名)', '(Insert先Table名)'
別サーバーの同一環境では動いていたストアド&バッチファイルですので、SQL Serverの設定の違いが原因かと思い、比較してみたところ、
システム ストアドプロシージャ に名称が dt_ から始まるストアドがありませんでした。
また、セキュリティ > ロール > データベースロール > public のプロパティの
セキュリティ保護可能なリソース に スキーマ=dbo の dt_ から名称が始まるストアドがやはりありませんでした。
dt_XXのストアドがないのがBulk Insert のエラー原因なのかはわかりませんが、もしこれが原因だとしたら
システムストアドの登録方法がわかりません。
また dt_XXのシステムストアドが無い事がほかの不具合につながらないか、不安にもなっています。これらにお詳しい方、回答方よろしくお願い致します。