2016-12-18 1 views
0

Ich versuche, einige PDF-Dateien in eine temporäre Tabelle zu importieren.SQL Server Masseneinfügung schlägt fehl, wenn es in einer gespeicherten Prozedur ist

Ich habe eine gespeicherte Prozedur zu diesem Zweck und ich verwende diesen Code:

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);'; 

Dieser Code, wenn ich die print @SqlCommand verwenden, gibt diese Ausgabe:

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); 

Wenn ich zu laufen versuchen Meine Stored Procedure bekomme ich jedoch einen Fehler:

You do not have permission to use the bulk load statement

Aber wenn ich das Komma benutze nd Linie in SSMS bekomme ich keinen Fehler.

Die gespeicherte Prozedur wird als der Benutzer ausgeführt wird, habe ich versucht, auch diese:

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

ich nicht bekommen, was wirklich innerhalb der gespeicherten Prozedur geschieht, bekam ich die Erlaubnis Fehler, außerhalb, ich don komm nicht. Gleicher Benutzer, gleicher Code.

Darüber hinaus ist der Benutzer ein Mitglied von Bulkadmin und verfügt über die Berechtigung "BULKOPERATION VERWALTEN".

Aus diesem Grund kann ich den Befehl direkt in SSMS ausführen.

Die Frage ist, warum bekomme ich direkt in SSMS und nicht die gespeicherte Prozedur?

Irgendwelche Einblicke für mich?

+0

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

Antwort

0

So gibt es zwei Möglichkeiten, es zu lösen:

  1. Wie gesagt, wenn die Datenbank für vertrauensvolle geprüft wird, wird es funktioniert;
  2. die Erlaubnis geben, die Benutzer in xp_cmdshell und entfernen Sie die EXECUTE AS

ich die zweite Option habe, weil wir nur zwei Benutzer unter Verwendung der gespeicherten Prozedur haben.

Danke!

0

Haben Sie die 'vertrauenswürdige' Datenbankoption überprüft? Es muss für solche Operationen von außen auf "EIN" gesetzt sein. Falls nein, versuchen Sie dies:

ALTER DATABASE <your_db_name> SET TRUSTWORTHY ON; 
Verwandte Themen