我正在尝试将一些PDF文件导入临时表。
我为此创建了一个存储过程,我使用了这段代码:
SET @SqlCommand = 'INSERT INTO ZENVIOBOLETO (IDBOLETO,NomeArquivo, image_data) SELECT '+CAST(@IDBOLETO AS VARCHAR(10))+','''+@NomeArquivo+''',image_data FROM OPENROWSET(BULK N'''+@Pasta+@FileName+''''+',SINGLE_BLOB) AS ImageSource(image_data);';
如果我使用print @SqlCommand
,此代码将返回此输出:
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);
但是,当我尝试运行我的存储过程时,出现错误:
您无权使用批量加载声明
但是当我在SSMS中使用命令行时,我没有收到任何错误。
存储过程作为同一个用户运行,我也试过了:
ALTER PROCEDURE [dbo].[ACERTANOMEBOLETOS](@Pasta VARCHAR(100), @CODCOLIGADA INT)
WITH EXECUTE AS 'suporte'
我真的没有得到正在发生的事情,在存储过程中我得到了权限错误,在它之外,我没有得到。相同的用户,相同的代码。
此外,该用户是bulkadmin的成员,并具有“ADMINISTER BULK OPERATIONS”权限。
因此我可以直接在SSMS中运行命令。
问题是,为什么我直接进入SSMS而不是存储过程?
对我有什么见解?
答案 0 :(得分:0)
您是否检查过“值得信赖的”'数据库选项?它必须设置为“开启”。从外面进行此类操作。如果不是,试试这个:
ALTER DATABASE <your_db_name> SET TRUSTWORTHY ON;
答案 1 :(得分:0)
所以,有两种方法可以解决它:
我做了第二个选项,因为我们只有2个用户使用存储过程。
谢谢!