2016-12-18 9 views
0

一部のPDFファイルを一時テーブルにインポートしようとしています。ストアドプロシージャ内にあるときにSQL Serverの一括挿入が失敗する

私はその目的のためにストアドプロシージャを作成し、私はこのコードを使用します。私はprint @SqlCommandを使用する場合

SET @SqlCommand = 'INSERT INTO ZENVIOBOLETO (IDBOLETO,NomeArquivo, image_data) SELECT '+CAST(@IDBOLETO AS VARCHAR(10))+','''[email protected]+''',image_data FROM OPENROWSET(BULK N'''[email protected][email protected]+''''+',SINGLE_BLOB) AS ImageSource(image_data);'; 

このコードを、この出力を返します:

INSERT INTO ZENVIOBOLETO (IDBOLETO,NomeArquivo, image_data) 
    SELECT 803, '20162744', image_data 
    FROM OPENROWSET(BULK N'c:\RM\Boleto.1.803.PDF', SINGLE_BLOB) AS ImageSource(image_data); 

私が実行しようとすると私のストアドプロシージャは、私はエラーが表示されます:

You do not have permission to use the bulk load statement

私はコンマSSMSのnd行私は何のエラーもありません。

ストアドプロシージャが同じユーザーとして実行されて、私もこの試みた

ALTER PROCEDURE [dbo].[ACERTANOMEBOLETOS](@Pasta VARCHAR(100), @CODCOLIGADA INT) 
WITH EXECUTE AS 'suporte' 

を私は本当にそれの外に、私は許可エラーを得たストアド・プロシージャ内で、何が起こっているかを得ることはありません、私はドン〜を得る。同じユーザー、同じコード。

さらに、ユーザーはbulkadminのメンバーであり、「管理者の管理操作」権限を持っています。

このため、私はSSMSで直接コマンドを実行できます。

問題は、なぜ私はSSMSに直接入ってストアドプロシージャではないのですか?

私の洞察はありますか?

+0

http://stackoverflow.com/questions/14604416/how-to-enable-bulk-permission-in-sql-server – McNets

答えて

0

だから、それを解決するための2つの方法があります:

  1. としては、データベースがTRUSTWORTHYそれは意志作品のためにチェックされている場合は、言いました。
  2. 我々はストアドプロシージャを使用してわずか2ユーザーを持つことになりますので、私は2番目のオプションをやったxp_cmdshellをのユーザーに許可を与え、

AS EXECUTEを削除します。

ありがとうございます!

0

「信頼できる」データベースオプションをチェックしましたか?このような操作を外部から行うには、ONに設定する必要があります。いいえ場合は、これを試してみてください。

ALTER DATABASE <your_db_name> SET TRUSTWORTHY ON; 
関連する問題