使用执行方式的Openrowset

时间:2018-08-28 08:45:53

标签: sql-server tsql sql-server-2014

使用SQL Server 2014

我正在使用OpenRowSet从Excel文件中提取数据。

我在单独的服务器上有一个文件夹,该文件夹已授予我自己的Windows帐户完全权限,并添加到我要导入的文件中。

运行以下代码时

Alter procedure [dbo].[usp_e_import]

WITH EXECUTE AS 'Domain\user'

as

delete from ETable

insert into ETable
select * from openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=\\server\sharedfolder\upload\Spreadsheet.xlsx;HDR=YES;IMEX=1', 'SELECT * FROM [DataT$]')

我收到错误

Access to the remote server is denied because the current security context is not trusted.

我自己的SQL帐户在SQL Server上具有管理员权限。

还有一点需要注意的是,如果我使用自己的凭据登录到SQL Server并使用设置为WITH EXECUTE的命令运行代码,它将失败,这没有意义,因为从技术上讲,我只传递了相同的信息凭据两次。

如果我注释掉WITH EXECUTE,一切都会正常进行。

有人可以指出正确的方向来解决此问题吗?

1 个答案:

答案 0 :(得分:0)

使用批量插入

CREATE procedure [dbo].[usp_e_import]

AS

DELETE TableName

BULK INSERT TableName
FROM '\\server\folder\Book1.csv'
WITH
(
    FIRSTROW = 1,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    TABLOCK
)