【发布时间】:2017-05-03 14:42:26
【问题描述】:
我正在尝试将一些 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 而不是存储过程?
对我有什么见解吗?
【问题讨论】:
标签: sql-server bulkinsert