我正在尝试在存储过程中打开xlsx文件。当我在架构应用程序中执行过程时,但执行为dbo:
ALTER PROCEDURE [app].[Compare] (
@p_CPN_ID int,
@p_FILE_LOCATION nvarchar(max)
)
WITH EXECUTE AS 'dbo'
AS
BEGIN
BEGIN TRY
DELETE FROM dbo.IMPORT
DECLARE @v_OPEN_ROWSET NVARCHAR(MAX)
SET @v_OPEN_ROWSET = 'INSERT INTO dbo.IMPORT
SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',''Excel 8.0;HDR=YES;Database=' + @p_FILE_LOCATION + ''',''select * from [Arkusz1$]'')'
EXECUTE sp_executesql @SQLString = @v_OPEN_ROWSET
END TRY
BEGIN CATCH
declare @err nvarchar(max)
set @err = ERROR_MESSAGE()
RAISERROR(@err,16,1)
RETURN 1
END CATCH
END
我收到了这个错误:
拒绝访问远程服务器,因为当前的安全上下文不受信任。
但没有“执行为dbo”的dbo架构中的过程完全正常。为什么呢?
答案 0 :(得分:0)
我找到了决心。首先,我创建了用户" app"在Windows Server中,并授予文件夹的权限。接下来创建新的" app" ssms中的凭据并映射到" app"登录。然后我不得不修改程序:
EXECUTE AS CALLER
EXECUTE sp_executesql @SQLString = @v_OPEN_ROWSET
REVERT